Underscore.js将对象转换为数组

Hus*_*man 4 javascript arrays object underscore.js

我对underscore.js相对较新,我有一个来自REST服务的对象,看起来像这样(我手动输入并将其分配给var):

var production = [
    {key: ["wind", "1"], value: 5},
    {key: ["wind", "2"], value: 9},
    {key: ["wind", "3"], value: 11},
    {key: ["wind", "4"], value: 7},
    {key: ["solar", "1"], value: 1},
    {key: ["solar", "2"], value: 1},
    {key: ["solar", "3"], value: 2},
    {key: ["solar", "4"], value: 3},
    {key: ["oil", "1"], value: 15},
    {key: ["oil", "2"], value: 16},
    {key: ["oil", "3"], value: 22},
    {key: ["oil", "4"], value: 23},
];
Run Code Online (Sandbox Code Playgroud)

然后再往下,我有一些代码解析这个对象并为这些项创建数组,如下所示:

var orderedProduction = _.chain(production)
      .groupBy(function (entity) {
            return entity.key[0];
      })
      .map(function (values) { 
            return _.map(values, function (entity2) {
                  return entity2.value;
            });
      })
      .value();
Run Code Online (Sandbox Code Playgroud)

这给出了以下结果:

orderedProduction  = [
  [5, 9, 11, 7],
  [1, 1, 2, 3],
  [15, 16, 22, 23]
]
Run Code Online (Sandbox Code Playgroud)

哪个丢失了钥匙(风/太阳能/油).并用于绘制图形.我还能够检查其中一些阵列是否达到某个阈值,如下所示:

var threshold = _.map(orderedProduction  , function(arr) {
    return _.max(arr) > 10;
});
Run Code Online (Sandbox Code Playgroud)

我的要求现在已经改变,我现在需要按总和来过滤掉这些数组,同时保留密钥.

我想最终得到一个像这样的对象:

orderedProduction  = {
      "wind": [5, 9, 11, 7],
      "solar": [1, 1, 2, 3],
      "oil": [15, 16, 22, 23]
    }
Run Code Online (Sandbox Code Playgroud)

如果修复程序包含一种总结数组值的方法并删除那些不总计达到一定数量的数组,那将会很棒.(即排除太阳能,如果不加10).

这是我创建的一个jsfiddle来测试这一切:http://jsfiddle.net/2mfjw3jk/


更新:我解决的解决方案是:

var orderedProduction = _.chain(production)
    .groupBy(function (entity) {
        return entity.key[0];
    })
    .map(function (vals, key) {
        return [key, _.pluck(vals, 'value')]
    })
    .filter(function(arr) {
        var sum = 0;
        _.each(arr[1], function(num){
            sum += num;
        })
        return sum > 10;
    })
    .object()
    .value();
Run Code Online (Sandbox Code Playgroud)

它还将值过滤预定阈值(在这种情况下为10).

geo*_*org 7

你快到了:

var orderedProduction = _.chain(production)
    .groupBy(function (entity) {
        return entity.key[0];
    })
    .map(function (vals, key) {
        return [key, _.pluck(vals, 'value')]
    })
    .object()
    .value();
Run Code Online (Sandbox Code Playgroud)

回报

{ wind: [ 5, 9, 11, 7 ],
  solar: [ 1, 1, 2, 3 ],
  oil: [ 15, 16, 22, 23 ] }
Run Code Online (Sandbox Code Playgroud)