如何累积 _.zip、_.map _.reduce 操作?
How can I cumulate _.zip, _.map _.reduce operations?
给出一个 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] }
]
}
]
};
我可以将 "sums" 属性 设置为 lodash/underscore :
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()
是否可以cumulate/chain调用得到预期的结果?
非常感谢您的帮助。
我认为 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]
给出一个 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] }
]
}
]
};
我可以将 "sums" 属性 设置为 lodash/underscore :
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()
是否可以cumulate/chain调用得到预期的结果?
非常感谢您的帮助。
我认为 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]