javascript - 按 Javascript 对象键 + 数组分组

标签 javascript arrays underscore.js

我正在尝试使用下划线将我的对象数组分组到一个较小的列表中:

    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' ] }
  ];

http://jsfiddle.net/77gL11c9/1/

最佳答案

list.reduce(function (memo, v) {
  if (memo[v.Region]) {
    memo[v.Region] = memo[v.Region].concat(v.Vals)
  } else {
    memo[v.Region] = v.Vals.slice()
  }
  return memo
}, {})

输出将如下所示:

{
  A: [ 7, "H", 40, "VH" ],
  B: [40, "H", 24, "VH" ],
  C: [ 4, "VH" ]
}

关于javascript - 按 Javascript 对象键 + 数组分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41554523/

相关文章:

javascript - ajax追加列表组项目不触发点击事件

javascript - 如何在方法使用后保持变量值相同?

javascript - Backbone和下划线js为什么需要使用bindAll

javascript - 如何在 JavaScript 中将字符串树解析为数组

javascript - 在 jquery 中创建一个元素

javascript - 如何在 TypeScript 应用程序中为 Jest 添加类型检查器?

arrays - 迭代列表中的键值对并转换为 pandas 数据帧

Javascript 数组如果为空错误

javascript - 下划线中的去抖动函数

javascript - 测试使用带有 Jest 和 enzyme 的样式组件创建的组件