在 JavaScript 对象数组中通过 id 查找对象

2117

我有一个数组:

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

我无法更改数组的结构。我正在传递一个id参数 45,我想获取该数组中该对象的'bar'值。

如何在JavaScript或使用jQuery实现?

37个回答

2
试试这个解决方案
myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}, etc.]
var bar = myArray.find(ob=>(ob.id == 45)).bar;

1
aggaton's answer开始,这是一个函数,它实际上返回所需的元素(如果找不到则返回null),给定array和一个callback函数,该函数对于“正确”的元素返回一个真值:
function findElement(array, callback) {
    var elem;
    return array.some(function(e) {
        if (callback(e)) {
            elem = e;
            return true;
        }
    }) ? elem : null;
});

请记住,这在IE8及以下版本中无法本地工作,因为它不支持some。可以提供polyfill,或者始终使用经典的for循环:

function findElement(array, callback) {
    for (var i = 0; i < array.length; i++)
        if (callback(array[i])) return array[i];
    return null;
});

实际上更快更紧凑。但如果您不想重复造轮子,我建议使用像underscore或lodash这样的实用程序库。


0

最短的,

var theAnswerObj = _.findWhere(array, {id : 42});

2
这需要使用下划线库,OP要求提供一个纯JavaScript或jQuery解决方案。 - Tobias Beuving
4
如果你加入下划线,这将不再是一个简短的回答! - Tim Ogilvy

0
以下代码将帮助您在数据中搜索嵌套对象中的值。
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)
         }
      })
   }
}))

-2

将“axesOptions”视为对象数组,其中对象格式为 {:field_type => 2, :fields => [1,3,4]}

function getFieldOptions(axesOptions,choice){
  var fields=[]
  axesOptions.each(function(item){
    if(item.field_type == choice)
        fields= hashToArray(item.fields)
  });
  return fields;
}

-4

我找到数组索引的方法:

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

-7
使用jQuery的filter方法:
 $(myArray).filter(function()
 {
     return this.id == desiredId;
 }).first();

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

它还具有很好的 C# LINQ 格式优势。


5
“filter”方法旨在用于元素,而非数组。请改用“grep”方法。 - Guffa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接