从具有相似值的对象数组中获取所有对象

时间:2014-04-24 11:00:04

标签: javascript arrays object iteration

假设我在数组中有5个这样的对象:

var myObjects = [{a: 1, b: 2}, {a: 3, b: 4}, {a: 1, b: 6}, {a: 3, b: 8}, {a: 1, b: 9}];

如何迭代此myObjects并获取具有类似值a = 1的对象。例如。结果{a: 1, b: 2},{a: 1, b: 6},{a: 1, b: 9}

3 个答案:

答案 0 :(得分:4)

使用Array.prototype.filter

var result = myObjects.filter(function(e) {
    return e.a === 1;
});

MDN 为不支持此方法的旧浏览器提供polyfill

如果要根据属性a对对象进行分组,则可以使用以下方法:

var result = {};

for (var i = 0, len = myObjects.length; i < len; i++) {
    var obj = myObjects[i];

    if (result[obj.a] === undefined) {
        result[obj.a] = [];
    }

    result[obj.a].push(obj);
}

console.log(result);

答案 1 :(得分:1)

扩展@ VisioN的答案:您可以使用工厂函数本身返回一个函数来过滤:

function filterAByValue(value) {
  return function(item) {
    return item.a === value;
  };
}

var result = myObjects.filter(filterAByValue(1));

甚至可以创建属性变量:

function filterPropertyByValue(property, value) {
  return function(item) {
    return item[property] === value;
  };
}

var result = myObjects.filter(filterPropertyByValue("a", 1));

答案 2 :(得分:0)

试试这个

var index[];
for(i=0;i<obj.lenght;i++)
{
    if(obj[i].a==1)
    {
       index.push(i);
       //you even can push obj[i] to some other array and use it
    }
}