我有一个数组:
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实现这一点?
当前回答
myArray.filter(function(a){ return a.id == some_id_you_want })[0]
其他回答
我们可以使用Jquery方法$.each()/$.grep()
var data= [];
$.each(array,function(i){if(n !== 5 && i > 4){data.push(item)}}
or
var data = $.grep(array, function( n, i ) {
return ( n !== 5 && i > 4 );
});
使用ES6语法:
Array.find, Array.filter, Array.forEach, Array.map
或使用Lodashhttps://lodash.com/docs/4.17.10#filter强调https://underscorejs.org/#filter
Use:
var retObj ={};
$.each(ArrayOfObjects, function (index, obj) {
if (obj.id === '5') { // id.toString() if it is int
retObj = obj;
return false;
}
});
return retObj;
它应该按id返回一个对象。
只要浏览器支持ECMA-262,第5版(2009年12月),这应该可以工作,几乎只有一行:
var bFound = myArray.some(function (obj) {
return obj.id === 45;
});
下面的代码将帮助您从数据中的嵌套对象中搜索值。
const updatedData = myArrayOfObjects.filter((obj: any) => Object.values(obj).some((val: any) => {
if (typeof (val) == typeof ("str")) {
return val.toString().includes(Search)
} else {
return Object.values(val).some((newval: any) => {
if (newval !== null) {
return newval.toString().includes(Search)
}
})
}
}))
以下是我将如何在纯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'