如何确定Javascript数组是否包含一个具有等于给定值的属性的对象?

45 浏览
0 Comments

如何确定Javascript数组是否包含一个具有等于给定值的属性的对象?

我有一个数组,像这样:

vendors = [{
    Name: 'Magenic',
    ID: 'ABC'
  },
  {
    Name: 'Microsoft',
    ID: 'DEF'
  } // and so on... 
];

我应该如何检查这个数组是否存在\"Magenic\"?除非必须,我不想使用循环。因为我可能要处理几千条记录。

admin 更改状态以发布 2023年5月22日
0
0 Comments

2018编辑: 此回答来自2011年,在浏览器广泛支持数组过滤方法和箭头函数之前。请查看CAFxX的答案

没有什么"神奇"的方法可以在不使用循环的情况下检查数组中的内容。即使您使用一些函数,该函数本身也会使用循环。你可以做的就是尽快找到你需要的内容并跳出循环,以最小化计算时间。

var found = false;
for(var i = 0; i < vendors.length; i++) {
    if (vendors[i].Name == 'Magenic') {
        found = true;
        break;
    }
}

0
0 Comments

没有必要重新发明轮子,至少不需要显式地(使用箭头函数,在现代浏览器中支持):

if (vendors.filter(e => e.Name === 'Magenic').length > 0) {
  /* vendors contains the element we're looking for */
}

或者更好的选择是,使用 some,因为它允许浏览器在找到匹配的元素后立即停止,所以速度会更快:

if (vendors.some(e => e.Name === 'Magenic')) {
  /* vendors contains the element we're looking for */
}

或者等效于(在这种情况下)find

if (vendors.find(e => e.Name === 'Magenic')) {
  /* same result as above, but a different function return type */
}

你甚至可以通过使用 findIndex 获得该元素的位置:

const i = vendors.findIndex(e => e.Name === 'Magenic');
if (i > -1) {
  /* vendors contains the element we're looking for, at index "i" */
}

如果你需要与差劲的浏览器兼容,那么你最好的选择是:

if (vendors.filter(function(e) { return e.Name === 'Magenic'; }).length > 0) {
  /* vendors contains the element we're looking for */
}

0