我有一个数组:

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

我无法更改阵列的结构。我收到了一个45的id,我想得到数组中该对象的“bar”。

如何在JavaScript或使用jQuery实现这一点?


当前回答

更通用和简短

function findFromArray(array,key,value) {
        return array.filter(function (element) {
            return element[key] == value;
        }).shift();
}

在您的示例中,Ex.varelement=findFromArray(myArray,'id',45),它将为您提供整个元素。

其他回答

使用jQuery的过滤方法:

 $(myArray).filter(function()
 {
     return this.id == desiredId;
 }).first();

这将返回具有指定Id的第一个元素。

它还具有良好的C#LINQ格式的优点。

下面的代码将帮助您从数据中的嵌套对象中搜索值。

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)
         }
      })
   }
}))

使用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)来转换代码。

你可以使用过滤器,

  function getById(id, myArray) {
    return myArray.filter(function(obj) {
      if(obj.id == id) {
        return obj 
      }
    })[0]
  }

get_my_obj = getById(73, myArray);

查找数组索引的方法:

index = myArray.map((i) => i.id).indexOf(value_of_id);
item = myArray[index];