我们如何返回一组对象的属性值?
[
{ id: 1, category: 'A' },
{ id: 2, category: 'A' },
{ id: 3, category: 'C' },
{ id: 4, category: 'B' },
{ id: 5, category: 'A' },
]
我想获得所有类别=' A' [1, 2, 5]
并使用.map()
包含一个我不喜欢的未定义对象,过滤器返回整个对象而不是id。
使用.map()
输出:[1, 2, undefined, undefined, 5]
使用.filter()
输出:
[
Object {
category: 'A',
id: 1
},
Object {
category: 'A',
id: 2
},
Object {
category: 'A',
id: 5,
},
]
答案 0 :(得分:2)
一种选择是使用Array#filter
然后使用Array#map
:
var data = [{"id":1,"category":"A"},{"id":2,"category":"A"},{"id":3,"category":"C"},{"id":4,"category":"B"},{"id":5,"category":"A"}];
var result = data.filter(function(item) {
return item.category === 'A';
}).map(function(item) {
return item.id;
});
console.log(result);

另一种选择是使用Array#reduce
:
var data = [{"id":1,"category":"A"},{"id":2,"category":"A"},{"id":3,"category":"C"},{"id":4,"category":"B"},{"id":5,"category":"A"}];
var result = data.reduce(function(items, item) {
item.category === 'A' && items.push(item.id);
return items;
}, []);
console.log(result);

答案 1 :(得分:1)
您可以在一个循环中使用Array#reduce
。
var array = [{ id: 1, category: 'A' }, { id: 2, category: 'A' }, { id: 3, category: 'C' }, { id: 4, category: 'B' }, { id: 5, category: 'A' }],
category = 'A',
result = array.reduce(function (r, o) {
if (o.category === category) {
r.push(o.id);
}
return r;
}, []);
console.log(result);
答案 2 :(得分:0)
您可以将filter()
和map()
var data = [{ id: 1, category: 'A' }, { id: 2, category: 'A' }, { id: 3, category: 'C' }, { id: 4, category: 'B' }, { id: 5, category: 'A' }]
var new_data_filter = data.filter(function(item) {
if (item.category === 'A') {
return item.id
}
}).map(function(a){return a.id})
console.log(new_data_filter)
适用于ES6
var new_data_filter = data.filter(item => item.category === 'A').map(a => a.id)