给出一个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()
是否可以累积/链式调用以获得预期结果?
非常感谢你的帮助。
答案 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]