假设我有一个变量:
var vendors = [
{
Name: 'Magenic',
ID: 'ABC'
},
{
Name: 'Microsoft',
ID: 'DEF'
}
];
var v1 = {
Name: 'Magenic',
ID: 'ABC'
};
当我运行以下代码以使用 indexOf 在v1
中搜索vendors
时,它始终会返回-1
console.log(vendors.indexOf(v1));
即使v1
数组中存在vendors
,它也会返回-1。使用js在对象数组中查找对象索引的正确方法是什么?
我可以使用循环,但代价很高:(
答案 0 :(得分:3)
您可以使用findIndex
:
var vendors = [{ Name: 'Magenic', ID: 'ABC' }, { Name: 'Microsoft', ID: 'DEF' }];
console.log(vendors.findIndex(v => v.ID === 'ABC')) // 0
console.log(vendors.findIndex(v => v.ID === 'DEF')) // 1

答案 1 :(得分:1)
要检查数组是否包含对象,您可以使用some()
,然后检查key - value
的某个数组对象中是否存在每个every()
对,这将返回true/false
结果。
var vendors = [{
Name: 'Magenic',
ID: 'ABC'
}, {
Name: 'Microsoft',
ID: 'DEF'
}];
var v1 = {
Name: 'Magenic',
ID: 'ABC'
};
var result = vendors.some(function(e) {
return Object.keys(v1).every(function(k) {
if(e.hasOwnProperty(k)) {
return e[k] == v1[k]
}
})
})
console.log(result)

答案 2 :(得分:0)
通过这种方式,您可以测试对象是否包含在对象数组中
var vendors = [
{
Name: 'Magenic',
ID: 'ABC'
},
{
Name: 'Microsoft',
ID: 'DEF'
}
];
var v1 = {
Name: 'Magenic',
ID: 'ABC'
};
var result = vendors.findIndex(x => x.ID === v1.ID && x.Name === v1.Name)
console.log(result);