我有一个像这样的JavaScript对象数组:
var myArray = [{...}, {...}, {...}];
每个对象在其他属性中都有唯一的id
:
{
id: 4,
property1: 'something',
property2: 'something'
}
如果我只知道它的id
属性,我如何获得该数组中特定对象的索引?如果我知道myArray[x].id == 4
,我该如何找到x
?
答案 0 :(得分:60)
var index = myArray.map(function(el) {
return el.id;
}).indexOf(4);
对于低于版本9的IE,map需要补丁,或者只需使用循环。
答案 1 :(得分:15)
或者使用ES6语法:
let index = myArray.map( el => el.id ).indexOf(4)
或
let index = myArray.findIndex( el => el.id === 4 )
答案 2 :(得分:7)
为什么不简单地制作一个循环?
function indexOfId(array, id) {
for (var i=0; i<array.length; i++) {
if (array[i].id==id) return i;
}
return -1;
}
js(或js库)中有许多工具这一事实并不意味着你有时不能写一个循环。这快速而简单。
答案 3 :(得分:1)
const myArray = [{id:1}, {id:2}, {id3}];
const foundIndex = myArray.findIndex((el) => (el.id === 3));
答案 4 :(得分:0)
您可以使用.reduce()
,这样可以将数组缩减为单个值。
var obj_idx = myArray.reduce(function(idx, item, i) {
return item.id === 4 ? i : idx;
}, -1);
如果找不到匹配项,则-1
是默认值。
如果您有多种用途,可能需要创建一个函数工厂。
function idxForID(target) {
return function(idx, item, i) {
return item.id === target ? i : idx;
};
}
然后像这样使用它。
var obj_idx = myArray.reduce(idxForID(4), -1);
答案 5 :(得分:0)
如果每个ID都是唯一的,您可以这样做:
o1 = {id:1}
o2 = {id:2}
o3 = {id:3}
o4 = {id:4}
a = [o1,o2,o3,o4]
a.indexOf( a.filter( function(i){return i.id==4} )[0] );
答案 6 :(得分:0)
你也可以尝试递归函数,虽然@ xdazz看起来很有吸引力。
var indexOfId = function(arr, id, index) {
if (!index) { index = 0; }
if (arr[index].id == id) {
return index;
}
return ((index += 1) >= arr.length) ? -1 : indexOfId(arr, id, index);
};