我怎样才能累积_.zip,_. map _.reduce操作?

时间:2015-06-24 14:03:44

标签: javascript underscore.js lodash

给出一个JSON:

var data = {
  "entries": [
    {
      "fund": 1,
      "values": [
        { "name": "alm1", "splits": [ 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]},
        { "name": "alm2", "splits": [ 0,   0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]}
      ]
   },
    {
      "fund": 2,
      "values": [
        { "name": "alm1", "splits": [ 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] },
        { "name": "alm2", "splits": [ 1.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] },
        { "name": "alm3", "splits": [ 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0] }
      ]
    }
  ]
};

我可以使用lodash / underscore设置“sums”属性:

var expected = {
  "entries": [
    {
      "fund": 1,
      "values": [
        { "name": "alm1", "splits": [ 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]},
        { "name": "alm2", "splits": [ 0,   0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]}
      ],
      "sums":                       [ 0.5, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
   },
    {
      "fund": 2,
      "values": [
        { "name": "alm1", "splits": [ 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] },
        { "name": "alm2", "splits": [ 1.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] },
        { "name": "alm3", "splits": [ 2,   0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0] }
      ],
      "sums":                       [ 4,   0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    }
  ],
  "sums":                           [ 4.5, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0]
};

我尝试过与lodash不同的方法,但没有成功。 _.map(),_。reduce()或_.zip()

是否可以累积/链式调用以获得预期结果?

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我认为unzip()更适合你正在做的事情:

var a1 = [ 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
    a2 = [ 1.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
    a3 = [ 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];

_([a1, a2, a3])
    .unzip()
    .map(_.sum)
    .value()
// → [4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]