在JSON数组中按属性查找对象

3

我遇到了一个问题,无法获取JSON数据中的字符串。格式如下:

[
  {
    "name": "Alice",
    "age": "20"
  },
  {
    "id": "David",
    "last": "25"
  },
  {
    "id": "John",
    "last": "30"
  }
]

有时它们会一起改变位置,John 从第三名升至第二名:

[
  {
    "name": "Alice",
    "age": "20"
  },
  {
    "name": "John",
    "age": "30"
  },
  {
    "name": "David",
    "age": "25"
  }
]

如果我使用data[3].age来获取John的年龄,然后数据改变了位置,我将获得David的年龄。

有没有一种方法可以找到nameDavid的对象并获取age值?


8
可能是 在 JavaScript 对象数组中根据 id 查找对象 的重复问题。 - Mark
data[3].age 会导致索引错误。 - user9455968
2个回答

7

您可以使用array.find()方法,如下所示:

var myArray = [
  {
    "name": "Alice",
    "age": "20"
  },
  {
    "name": "John",
    "age": "30"
  },
  {
    "name": "David",
    "age": "25"
  }
];

//Here you are passing the parameter name and getting the age 
//Find will get you the first matching object
var result = myArray.find(t=>t.name ==='John').age;
console.log(result);


1
工作得很好。非常感谢你。 - Hieu Nguyen

5

最好使用array.filter()(浏览器支持更好)

myArray.filter(function(el){return el.name == "John"})[0].age

1
虽然 Array.filterArray.find 有更好的浏览器支持,但我想指出,当 find 找到匹配项时就会返回,而 filter 将遍历数组中的每个项。因此,如果数组很大,它的性能会更差。在这种情况下,应该优先选择带有 break 语句的常规 for 循环。 - xyres

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