I have array of objects
var arr = [
{"id" : "1", "description" : "one"},
{"id" : "2", "description" : "two"},
{"id" : "3", "description" : "three"}]
I need get index, for example, for object with id="2".I do
var index = jQuery.inArray( {"id" : "2", "description" : "two"}, arr )
In index I get -1.
JsFiddle
1) Using jQuery If you are someone strongly committed to using the jQuery library, you can use the . inArray( ) method. If the function finds the value, it returns the index position of the value and -1 if it doesn't.
A jQuery object is array-like which means that it contains zero or more indexes (properties which names are positive integers starting with zero). Besides those indexes, a jQuery object contains these properties: length. context. selector.
Because inArray
uses ===
to compare elements, and different objects are never ===
to one another. (They're also not ==
to one another.)
E.g.:
var a = {"foo": "bar"};
var b = {"foo": "bar"};
console.log(a === b); // "false"
You'll need to create a method on them to compare them for equivalence, and then do the search yourself.
You can use a function that takes a callback:
function arrayFind(arr, fn) {
for( var i = 0, len = arr.length; i < len; ++i ) {
if( fn(arr[i]) ) {
return i;
}
}
return -1;
}
var arr = [
{"id" : "1", "description" : "one"},
{"id" : "2", "description" : "two"},
{"id" : "3", "description" : "three"}
];
var result = arrayFind(arr, function(v){
return v.id === "2" && v.description === "two";
});
console.log(result) //1
As TJ said, inArray
uses ===
(indexOf
actually, but that's the same thing), therefore even identical literals are compared non equal. Here's a workaround:
var index = jQuery.inArray(
JSON.stringify({"id" : "2", "description" : "two"}),
$.map(arr, JSON.stringify) )
http://jsfiddle.net/7kg9P/1/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With