我有一个由具有两个属性的对象组成的数组。
一个属性"值"是1到6之间的数字。 另一个属性" id"是1到200之间的数字。
如何返回" id"具有"值"的所有对象的属性; = 1并将它们写入新数组?
答案 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.filter
和Array.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中试试!!