我想知道是否有一种简单的方法可以从过滤后的数组中返回ID列表。
这是一个JSFiddle,我正在过滤一个数组http://jsfiddle.net/eRzBL/
var array = [{'id':1, 'Color':'blue'},
{'id':2, 'Color':'orange'},
{'id':3, 'Color':'green'},
{'id':4, 'Color':'blue'} ];
var myFilter = array.filter(function (item) {
return item.Color === 'blue';
});
我想返回一个ID列表,而不是返回一个对象列表。在这种情况下[1,4]。我可以创建一个新数组,遍历这个集合并附加ID,但我想知道我是否可以使用现有的下划线功能来实现这一点。
答案 0 :(得分:4)
您可以通过将过滤后的数据传递到map
来扩展这个想法,只获取ID。
var result = array.filter(function(item) {
return item.Color === 'blue';
}).map(function(item) {
return item.id;
});
console.log(result)
# [1, 4]
如果你想用下划线做这个,
var result = _.chain(array)
.filter(function(item) {
return item.Color === 'blue';
})
.pluck("id")
.value();
console.log(result);
# [1, 4]
此外,您可以使用_.where
,就像这样
var result = _.chain(array)
.where({Color: 'blue'})
.pluck("id")
.value();
console.log(result)
# [1, 4]
如果您更喜欢oneliners,
console.log(_.pluck(_.where(array, {Color: 'blue'}), "id"));
# [1, 4]
注意:上述方法都不能超越原生JavaScript的性能
var result = [];
for (var i = 0; i < array.length; i += 1) {
if (array[i].Color === "blue") {
result.push(array[i].id);
}
}
console.log(result);
# [1, 4]