假设我有一个包含四个对象的数组:

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

是否有一种方法,我可以通过属性b的值获得第三个对象({a: 5, b: 6})例如,没有a for…在循环?


当前回答

使用underscore.js:

var foundObject = _.findWhere(jsObjects, {b: 6});

其他回答

对象的过滤器数组,属性与值匹配,返回数组:

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

请参阅Array.prototype.filter()上的MDN文档

const jsObjects = [ {a: 1, b: 2}, {a: 3, b: 4}, {a: 5, b: 6}, {a: 7, b: 8} ] let result = jsObjects。过滤器(obj => { 返回obj。B === 6 }) console.log(结果)

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

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

请参阅Array.prototype.find()上的MDN文档

const jsObjects = [ {a: 1, b: 2}, {a: 3, b: 4}, {a: 5, b: 6}, {a: 7, b: 8} ] let result = jsObjects。Find (obj => { 返回obj。B === 6 }) console.log(结果)

如果您正在寻找一个单一的结果,而不是一个数组,我是否可以建议减少?

这里是一个简单的'ole javascript解决方案,如果存在,返回一个匹配的对象,如果不存在,则返回null。

var result = arr.reduce(function(prev, curr) { return (curr.b === 6) ? curr : prev; }, null);

你可以像下面这样使用箭头函数:

var demoArray = [
   {name: 'apples', quantity: 2},
   {name: 'bananas', quantity: 0},
   {name: 'cherries', quantity: 5}
];

var result = demoArray.filter( obj => obj.name === 'apples')[0];
console.log(result);
// {name: 'apples', quantity: 2}

如果我理解正确的话,你想在数组中找到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;
});

让这个答案的最佳/最快部分更具可重用性和清晰性:

function getElByPropVal(myArray, prop, val){
    for (var i = 0, length = myArray.length; i < length; i++) {
        if (myArray[i][prop] == val){
            return myArray[i];
        }
    }
}