我有对象数组
var arr = [
{"id" : "1", "description" : "one"},
{"id" : "2", "description" : "two"},
{"id" : "3", "description" : "three"}]
我需要获取索引,例如,对于id =“2”的对象。我做
var index = jQuery.inArray( {"id" : "2", "description" : "two"}, arr )
在索引中我得-1。
答案 0 :(得分:8)
由于inArray
使用===
来比较元素,因此不同的对象永远不会===
。 (他们彼此之间也不是==
。)
E.g:
var a = {"foo": "bar"};
var b = {"foo": "bar"};
console.log(a === b); // "false"
您需要在它们上创建一个方法来比较它们的等价性,然后自己进行搜索。
答案 1 :(得分:5)
您可以使用接受回调的函数:
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
答案 2 :(得分:1)
正如TJ所说,inArray
实际使用===
(indexOf
,但这是相同的事情),因此甚至相同的文字也不相等。这是一个解决方法:
var index = jQuery.inArray(
JSON.stringify({"id" : "2", "description" : "two"}),
$.map(arr, JSON.stringify) )