我有一个对象数组,我想创建一个过滤函数来返回一个新数组
var items = [{
"row": 0,
"column": 0,
"items": [2, 3, 4, 5, 6, 7]
}, {
"row": 0,
"column": 1,
"items": [8, 9, 10, 11, 12, 13]
....
{
"row": 2,
"column": 2,
"items": [50, 51, 52, 53, 54, 55]
}]
var newArray = function (items, row) {
//filter items and return new array
return filtered
}
newArray应包含具有相同行值的“items”中的所有值。
答案 0 :(得分:3)
如果我正确理解了这个问题,结果将由
给出function filter(items, row) {
return _.chain(items) // initiate method chaining for convenience
.where({row: row}) // filter out objects from rows we don't care about
.pluck("items") // get the "items" arrays from the filtered objects
.flatten() // concatenate them into a single array
.value(); // unwrap the result to return it
}
在给出的示例中调用filter(items, 0)
将返回
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
是items
数组内row
数组的连续聚合,{{1}}等于0。
答案 1 :(得分:2)
也许你正在寻找这个:
_.reduce(items, function(res, item) {
var key = item.row;
if (!(key in res)) res[key] = [];
[].push.apply(res[key], item.items);
return res;
}, {})
答案 2 :(得分:1)
在下划线中,获取行值与数组中项目索引匹配的所有项目:
var items = [...];
var filteredItems = _.filter(items, function(item, i) {
return item.row == i;
});
或使用本机Array.prototype.map方法。 E.g。
var items = [...];
var filteredItems = items.filter(function(item, i) {
return item.row == i;
});