如何确定Javascript数组是否包含属性等于给定值的对象?
2022-08-29 22:05:32
我有一个数组,如
vendors = [{
Name: 'Magenic',
ID: 'ABC'
},
{
Name: 'Microsoft',
ID: 'DEF'
} // and so on...
];
如何检查此数组以查看是否存在“Magenic”?我不想循环,除非我必须这样做。我正在处理可能有几千条记录。
我有一个数组,如
vendors = [{
Name: 'Magenic',
ID: 'ABC'
},
{
Name: 'Microsoft',
ID: 'DEF'
} // and so on...
];
如何检查此数组以查看是否存在“Magenic”?我不想循环,除非我必须这样做。我正在处理可能有几千条记录。
无需重新发明轮环,至少不要明确(使用箭头函数,仅限现代浏览器):
if (vendors.filter(e => e.Name === 'Magenic').length > 0) {
/* vendors contains the element we're looking for */
}
或者,更好的是,因为它允许浏览器在找到一个匹配的元素后立即停止,因此它将更快:
if (vendors.some(e => e.Name === 'Magenic')) {
/* vendors contains the element we're looking for */
}
编辑:如果您需要与糟糕的浏览器兼容,那么您最好的选择是:
if (vendors.filter(function(e) { return e.Name === 'Magenic'; }).length > 0) {
/* vendors contains the element we're looking for */
}
2018年编辑:这个答案来自2011年,在浏览器广泛支持数组过滤方法和箭头函数之前。看看CAFxX的答案。
没有“神奇”的方法可以在没有循环的情况下检查数组中的内容。即使您使用某些函数,函数本身也会使用循环。你可以做的是,一旦你找到你想要的东西,就打破循环,以最大限度地减少计算时间。
var found = false;
for(var i = 0; i < vendors.length; i++) {
if (vendors[i].Name == 'Magenic') {
found = true;
break;
}
}