我有一个数组:
myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}, etc.]
我无法更改数组的结构。我被传递了一个 id 45,我想'bar'在数组中获取该对象。
45
'bar'
如何在 JavaScript 中或使用 jQuery 中执行此操作?
使用find()方法:
find()
myArray.find(x => x.id === '45').foo;
来自MDN:
find()如果数组中的元素满足提供的测试函数,则该方法返回数组中的第一个值。否则undefined返回。
undefined
如果您想找到它的索引,请使用findIndex():
findIndex()
myArray.findIndex(x => x.id === '45');
该findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引。否则返回 -1。
如果要获取匹配元素的数组,请改用该filter()方法:
filter()
myArray.filter(x => x.id === '45');
这将返回一个对象数组。如果要获取foo属性数组,可以使用以下map()方法:
foo
map()
myArray.filter(x => x.id === '45').map(x => x.foo);
旁注:旧浏览器(如 IE)不支持find()orfilter()和箭头函数等方法,因此如果您想支持这些浏览器,您应该使用Babel(使用polyfill)转译您的代码。
由于您已经在使用 jQuery,您可以使用用于搜索数组的grep函数:
var result = $.grep(myArray, function(e){ return e.id == id; });
结果是一个包含找到的项目的数组。如果您知道该对象始终存在并且只出现一次,则可以使用result[0].foo来获取值。否则,您应该检查结果数组的长度。例子:
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 }