我有一个数组:
myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}, etc.]
我无法更改阵列的结构。我收到了一个45的id,我想得到数组中该对象的“bar”。
如何在JavaScript或使用jQuery实现这一点?
我有一个数组:
myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}, etc.]
我无法更改阵列的结构。我收到了一个45的id,我想得到数组中该对象的“bar”。
如何在JavaScript或使用jQuery实现这一点?
当前回答
我认为最简单的方法是以下方法,但它在Internet Explorer 8(或更早版本)上不起作用:
var result = myArray.filter(function(v) {
return v.id === '45'; // Filter out the appropriate one
})[0].foo; // Get result and access the foo property
其他回答
查找数组索引的方法:
index = myArray.map((i) => i.id).indexOf(value_of_id);
item = myArray[index];
您可以使用map()函数轻松实现这一点:
myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}];
var found = $.map(myArray, function(val) {
return val.id == 45 ? val.foo : null;
});
//found[0] == "bar";
工作示例:http://jsfiddle.net/hunter/Pxaua/
myArray.filter(function(a){ return a.id == some_id_you_want })[0]
更通用和简短
function findFromArray(array,key,value) {
return array.filter(function (element) {
return element[key] == value;
}).shift();
}
在您的示例中,Ex.varelement=findFromArray(myArray,'id',45),它将为您提供整个元素。
使用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()或filter()和arrow函数等方法,因此如果您想支持这些浏览器,应该使用Babel(带有polyfill)来转换代码。