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

2022-08-29 21:54:27

我有一个数组:

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

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

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


答案 1

使用方法:find()

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

来自 MDN

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


如果要改为查找其索引,请使用 :findIndex()

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

来自 MDN

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


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

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

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

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

旁注:像 or 这样的方法和箭头函数不受旧版浏览器(如 IE)的支持,所以如果你想支持这些浏览器,你应该使用 Babel(使用 polyfill)转译你的代码。find()filter()


答案 2

由于您已经在使用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
}