通过属性值从对象数组中获取JavaScript对象

比方说,我有一个包含四个对象的数组。

var jsObjects = [
   {a: 1, b: 2}, 
   {a: 3, b: 4}, 
   {a: 5, b: 6}, 
   {a: 7, b: 8}
];

有什么方法可以让我通过属性b的值来获得第三个对象({a: 5, b: 6}),例如不用for...in循环?

筛选 "对象的数组,其属性与值相匹配,返回数组。

var result = jsObjects.filter(obj => {
  return obj.b === 6
})

MDN文档中Array.prototype.filter()

const jsObjects = [
  {a: 1, b: 2}, 
  {a: 3, b: 4}, 
  {a: 5, b: 6}, 
  {a: 7, b: 8}
]

let result = jsObjects.filter(obj => {
  return obj.b === 6
})

console.log(result)

找到数组中第一个元素/对象的值,否则返回未定义

var result = jsObjects.find(obj => {
  return obj.b === 6
})

参见MDN文档中Array.prototype.find()

const jsObjects = [
  {a: 1, b: 2}, 
  {a: 3, b: 4}, 
  {a: 5, b: 6}, 
  {a: 7, b: 8}
]

let result = jsObjects.find(obj => {
  return obj.b === 6
})

console.log(result)
评论(19)

我不知道你为什么反对for循环(估计你是指for循环,而不是特指for...in),它们既快又容易阅读。总之,这里有一些选择。

For 循环。


function getByValue(arr, value) {

  for (var i=0, iLen=arr.length; i
评论(6)

如果我理解正确,你想在数组中找到b属性为6的对象?

var found;
jsObjects.some(function (obj) {
  if (obj.b === 6) {
    found = obj;
    return true;
  }
});

或者如果你用的是下划线。

var found = _.select(jsObjects, function (obj) {
  return obj.b === 6;
});
评论(4)