【发布时间】:2017-01-09 18:27:26
【问题描述】:
我正在尝试使用下划线将我的对象数组分组到一个较小的列表中:
var list = [
{ Region: 'A', Vals: [ 7, 'H' ] },
{ Region: 'B', Vals: [ 40, 'H' ] },
{ Region: 'B', Vals: [ 24, 'VH' ] },
{ Region: 'C', Vals: [ 4, 'VH' ] },
{ Region: 'A',Vals: [ 40, 'VH' ] }
];
var groups = _.groupBy(list, function(value){
return value.Region;
});
var grouped = _.map(groups, function(group){
return {
Region: group[0].Region,
Vals: group[0].Vals
}
});
这会有点接近,但它缺少一些 Vals。我想要基于键连接的“vals”数组。
var list = [
{ Region: 'A', Vals: [ 7, 'H', 40, 'VH' ] },
{ Region: 'B', Vals: [ 40, 'H', 24, 'VH' ] },
{ Region: 'B', Vals: [ 24, 'VH' ] },
{ Region: 'C', Vals: [ 4, 'VH' ] }
];
【问题讨论】:
-
您可以通过将
group[0].Vals替换为_.flatten(_.pluck(group, 'Vals'))来获得所有Vals -
var res = list.reduce(function(arr, v) { if (!(v.Region in ref)) { ref[v.Region] = arr.length; arr.push({Region: v.Region, Vals: v.Vals}); } else{ [].push.apply(arr[ref[v.Region]].Vals, v.Vals); } return arr; }, []);
标签: javascript arrays underscore.js