我有一个数组:
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实现这一点?
当前回答
使用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)来转换代码。
其他回答
你可以试试Sugarjshttp://sugarjs.com/.
它在Arrays上有一个非常好的方法,.find。所以你可以找到这样的元素:
array.find( {id: 75} );
您还可以向其传递具有更多财产的对象,以添加另一个“where-clause”。
请注意,Sugarjs扩展了本地对象,有些人认为这非常邪恶。。。
以下是我将如何在纯JavaScript中实现它,以我所能想到的在ECMAScript 3或更高版本中工作的最简单的方式。一旦找到匹配项,它就会返回。
var getKeyValueById = function(array, key, id) {
var testArray = array.slice(), test;
while(test = testArray.pop()) {
if (test.id === id) {
return test[key];
}
}
// return undefined if no matching id is found in array
return;
}
var myArray = [{'id':'73', 'foo':'bar'}, {'id':'45', 'foo':'bar'}]
var result = getKeyValueById(myArray, 'foo', '45');
// result is 'bar', obtained from object with id of '45'
使用jQuery的过滤方法:
$(myArray).filter(function()
{
return this.id == desiredId;
}).first();
这将返回具有指定Id的第一个元素。
它还具有良好的C#LINQ格式的优点。
使用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)来转换代码。
Undercore.js有一个很好的方法:
myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'},etc.]
obj = _.find(myArray, function(obj) { return obj.id == '45' })