通过JavaScript对象数组中的id查找对象

我有一个数组:

myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}, etc.]

我无法改变数组的结构。 我被传递了一个45的id,并且我想要为该对象在数组中获得'bar'

我如何在JavaScript中使用或使用jQuery?


myArray.find(x => x.id === '45').foo;

来自MDN:

如果数组中的元素满足提供的测试函数,则find()方法返回数组中的值。 否则返回undefined


如果您想获取匹配元素的数组,请改用filter()方法:

myArray.filter(x => x.id === '45');

这将返回一个对象数组。 如果你想得到一个foo属性数组,你可以用map()方法来做到这一点:

myArray.filter(x => x.id === '45').map(x => x.foo);

注意:诸如find()filter()和箭头函数等方法不适用于旧版浏览器(如IE),所以如果你想支持这些浏览器,你应该使用Babel来编译你的代码。


由于您已经在使用jQuery,因此您可以使用用于搜索数组的grep函数:

var result = $.grep(myArray, function(e){ return e.id == id; });

结果是一个包含找到的项目的数组。 如果您知道该对象始终存在,并且只出现一次,则可以使用result[0].foo来获取该值。 否则,你应该检查结果数组的长度。 例:

if (result.length == 0) {
  // not found
} else if (result.length == 1) {
  // access the foo property using result[0].foo
} else {
  // multiple items found
}

另一个解决方案是创建一个查找对象:

var lookup = {};
for (var i = 0, len = array.length; i < len; i++) {
    lookup[array[i].id] = array[i];
}

... now you can use lookup[id]...

如果你需要做很多查找,这特别有趣。

这将不需要更多的内存,因为ID和对象将被共享。

链接地址: http://www.djcxy.com/p/9431.html

上一篇: Find object by id in an array of JavaScript objects

下一篇: Pass in an array of Deferreds to $.when()