我有一个由包含两个属性的对象组成的数组。
一个属性“value”是1到6之间的数字。 另一个属性“id”是1到200之间的数字。
如何返回所有“value”等于1的对象的“id”属性,并将它们写入一个新数组?
一个属性“value”是1到6之间的数字。 另一个属性“id”是1到200之间的数字。
如何返回所有“value”等于1的对象的“id”属性,并将它们写入一个新数组?
你应该在那里调用 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 );
for...in
循环)。 - user663031纯JS代码...没有filter/map函数,因为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); }
for..in
循环遍历Array,它也会包括像.length
和其他属性一样的垃圾。 - jAndyfor...in
不会遍历长度。'length'不是一个可枚举的属性。 - user663031for...in
都不会迭代长度。即使在枚举是引擎内部严格概念的早期,它也始终是不可枚举的。 - user663031if (array.hasOwnProperty(key) && array[key].value == 1)
。 - Michael Freund如果要从一个数组中搜索多个项目并将其放入某些对象数组中,请使用以下方法
let old = []
ao = [{}, {}], array of objects
let newlist = []
old.map(a => ao.find(x => x.Name == a)!==undefined? newlist.push(ao.find(x => x.Name == a)): null)
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;
});
好消息是,这很容易,只需要写
[ for (obj of array) if (obj.value === 1) obj.id ]
坏消息是,在所有浏览器都能够支持这个功能之前,还需要一些时间。这是来自一种名为“ES6”的新语言版本。但是你现在可以在Firefox中尝试它!