假设我在数组中有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}
?
答案 0 :(得分:4)
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
}
}