【问题标题】:How to combine values in array by key?如何按键组合数组中的值?
【发布时间】:2015-08-24 15:05:18
【问题描述】:

我的数据如下所示:

data = [
  [
    {"name":"cpumhz","data":[[1433856538,0],[1433856598,0]]},
    {"name":"mem","data":[[1433856538,13660],[1433856598,13660]]}
  ],
  [
    {"name":"cpumhz","data":[[1433856538,0],[1433856598,0]]},
    {"name":"mem","data":[[1433856538,13660],[1433856598,13660]]}
  ],
  [
    {"name":"cpumhz","data":[[1433856538,0],[1433856598,0]]},
    {"name":"mem","data":[[1433856538,13660],[1433856598,13660]]}
  ]
];

如何使用 map 来组合数组项,以便连接 data 属性?

像这样:

data = [
  [
    {"name":"cpumhz","data":[[1433856538,0],[1433856598,0],[1433856538,0],[1433856598,0], [1433856538,0],[1433856598,0]]},
    {"name":"mem","data":[[1433856538,13660],[1433856598,13660], [1433856538,13660],[1433856598,13660], [1433856538,13660],[1433856598,13660]]}
  ]
];

通过像这样以非编程方式进行操作,我越来越接近:

res = []

cpudata = _.flatten([data[0][0].data, data[1][0].data, data[2][0].data])
res.push({name: 'cpumhz', data: cpudata})

memdata = _.flatten([data[0][1].data, data[1][1].data, data[2][1].data])
res.push({name: 'mem', data: memdata})

http://jsbin.com/bekodirili/7/edit

【问题讨论】:

    标签: javascript angularjs underscore.js lodash


    【解决方案1】:

    使用 lodash,您可以执行以下操作:

    _(data)
        .flatten()
        .groupBy('name')
        .reduce(function(result, item, key) {
            return result.concat([{
                name: key,
                data: _.flatten(_.pluck(item, 'data'))
            }]);
        }, []);
    

    您使用flatten() 创建一个数组,然后可以根据name 使用groupBy() 的值将其分组到一个对象中。此时,您有一个具有两个属性的对象 - cpuhzmem

    现在很容易将reduce() 对象放入您想要的数组中。

    【讨论】:

      【解决方案2】:

      研究使用reduce 函数。下划线/lodash 等价的功能。

      基本上你想将datareduce 减少到 1 个具有 2 个值的数组。像下面这样的东西应该可以工作:

      var reducedData = data.reduce(function(prev, cur) {
          prev.forEach(function(value, index) {
              value.data = value.data.concat(cur[index].data);
          });
      
          return prev;
      });
      

      您检查data 中的每个值并减少它。您将先前的子数据与当前的子数据连接并返回新值。

      【讨论】:

        猜你喜欢
        • 2017-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-14
        • 1970-01-01
        • 2015-10-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多