一尘不染

在 JavaScript 对象数组中按 id 查找对象

javascript

我有一个数组:

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

我无法更改数组的结构。我被传递了一个 id 45,我想'bar'在数组中获取该对象。

如何在 JavaScript 中或使用 jQuery 中执行此操作?


阅读 351

收藏
2022-02-14

共2个答案

一尘不染

使用find()方法:

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

来自MDN

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


如果您想找到它的索引,请使用findIndex()

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

来自MDN

findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引。否则返回 -1。


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

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

这将返回一个对象数组。如果要获取foo属性数组,可以使用以下map()方法:

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

旁注:旧浏览器(如 IE)不支持find()orfilter()箭头函数等方法,因此如果您想支持这些浏览器,您应该使用Babel(使用polyfill)转译您的代码。

2022-02-14
一尘不染

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

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

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

if (result.length === 0) {
  // no result found
} else if (result.length === 1) {
  // property found, access the foo property using result[0].foo
} else {
  // multiple items found
}
2022-02-14