返回对象数组的所有匹配元素?

时间:2014-11-10 12:50:52

标签: javascript

我有一个由具有两个属性的对象组成的数组。

一个属性"值"是1到6之间的数字。 另一个属性" id"是1到200之间的数字。

如何返回" id"具有"值"的所有对象的属性; = 1并将它们写入新数组?

4 个答案:

答案 0 :(得分:23)

你应该在那里调用Array.prototype.filter函数。

var filteredArray = YourArray.filter(function( obj ) {
    return obj.value === 1;
});

.filter()要求您返回所需的条件。它将根据过滤结果创建一个新数组。如果您还想对已过滤的Array进行操作,则可以调用更多方法,例如在您的实例中.map()

var filteredArray = YourArray.filter(function( obj ) {
    return obj.value === 1;
}).map(function( obj ) {
    return obj.id;
});

console.log( filteredArrays ); // a list of ids

......在不久的将来,我们最终可以使用ES6的箭头功能,这使得这段代码更加美观:

var filteredArray = YourArray.filter( obj => obj.value === 1 ).map( obj => obj.id );

答案 1 :(得分:4)

Pure JS ....没有过滤器/地图功能,不适用于IE< 9

var array = [
        {id:10, value:2}, {id:11, value:1}, {id:12, value:3}, {id:13, value:1}
    ],
    result = [];
for(key in array) { if (array[key].value == 1) result.push(array[key].id); }

答案 2 :(得分:0)

您可以使用Array.prototype.filterArray.prototype.map的组合。

首先,仅过滤value等于1的值。

arr.filter(function (obj) {
    return obj.value === 1;
});

然后,将现有集合映射到新数组,该数组仅包含存储在已过滤数组中的id属性。所以最后的代码:

var newArr = arr.filter(function (obj) {
    return obj.value === 1;
}).map(function (obj) {
    return obj.id;
}); 

答案 3 :(得分:0)

好消息是,这很容易,只需写一下

[ for (obj of array) if (obj.value === 1) obj.id ]

坏消息是,您需要一段时间才能依赖所有浏览器来执行此操作。它来自一个名为" ES6"的语言的新版本。但你现在可以在Firefox中试试!!