Javascript 合并并添加数组中对象的值
我被这件事缠住了。我有一个对象数组。所有对象都具有具有不同值的相同关键点。像这样Javascript 合并并添加数组中对象的值,javascript,lodash,Javascript,Lodash,我被这件事缠住了。我有一个对象数组。所有对象都具有具有不同值的相同关键点。像这样 [{'fxiC6Y9ZyAM7BA35': 58, '1z5WcPsr97Szv4TM': 58, 'HDcNgheglFuoZ78d': 64, 'x7IkUjDjikXTpubn': 64, '7lnJSC07g1PoDycH': 128}, {'fxiC6Y9ZyAM7BA35': 74, '1z5WcPsr97Szv4TM': 74, 'HDcNgheglFuoZ78d': 82, 'x7IkUjDjikX
[{'fxiC6Y9ZyAM7BA35': 58, '1z5WcPsr97Szv4TM': 58, 'HDcNgheglFuoZ78d': 64, 'x7IkUjDjikXTpubn': 64, '7lnJSC07g1PoDycH': 128},
{'fxiC6Y9ZyAM7BA35': 74, '1z5WcPsr97Szv4TM': 74, 'HDcNgheglFuoZ78d': 82, 'x7IkUjDjikXTpubn': 82, '7lnJSC07g1PoDycH': 164},
{'fxiC6Y9ZyAM7BA35': 74, '1z5WcPsr97Szv4TM': 74, 'HDcNgheglFuoZ78d': 78, 'x7IkUjDjikXTpubn': 78, '7lnJSC07g1PoDycH': 156}]
我可以访问Lodash,但找不到将每个键的值合并并添加到一个对象中的最佳方法
{fxiC6Y9ZyAM7BA35: 206, 1z5WcPsr97Szv4TM: 206, HDcNgheglFuoZ78d: 224, x7IkUjDjikXTpubn: 224, 7lnJSC07g1PoDycH: 448}
你可以用
const input=[{'fxiC6Y9ZyAM7BA35':58,'1z5WcPsr97Szv4TM':58,'hdcngheglefuoz78d':64,'x7IkUjDjikXTpubn':64,'7lnJSC07g1PoDycH':128},
{'fxiC6Y9ZyAM7BA35':74,'1z5WcPsr97Szv4TM':74,'hdcngheglefuoz78d':82,'x7IkUjDjikXTpubn':82,'7lnJSC07g1PoDycH':164},
{'fxiC6Y9ZyAM7BA35':74,'1z5WcPsr97Szv4TM':74,'hdcngheglefuoz78d':78,'x7IkUjDjikXTpubn':78,'7lnJSC07g1PoDycH':156}
]
常量输出=输入。减少((acc,cur)=>{
Object.keys(cur.forEach)(key=>{
如果(!acc[key])acc[key]=0;
acc[键]+=电流[键];
});
返回acc;
}, {});
控制台日志(输出)代码>您可以将这些链接到lodash:
const res = _.chain(data)
.flatMap(_.toPairs)
.groupBy(_.head)
.mapValues((pair) => _.reduce(pair, (sum, [_, val]) => sum + val, 0))
.value();
逐步:
- 使用
将其展平到键值对数组中。flatMap
[
["fxiC6Y9ZyAM7BA35", 58],
["1z5WcPsr97Szv4TM", 58],
["HDcNgheglFuoZ78d", 64],
["x7IkUjDjikXTpubn", 64],
["7lnJSC07g1PoDycH", 128],
["fxiC6Y9ZyAM7BA35", 74],
["1z5WcPsr97Szv4TM", 74],
["HDcNgheglFuoZ78d", 82],
["x7IkUjDjikXTpubn", 82],
["7lnJSC07g1PoDycH", 164],
["fxiC6Y9ZyAM7BA35", 74],
["1z5WcPsr97Szv4TM", 74],
["HDcNgheglFuoZ78d", 78],
["x7IkUjDjikXTpubn", 78],
["7lnJSC07g1PoDycH", 156],
]
- 按键分组,带有
。.groupBy
{
fxiC6Y9ZyAM7BA35: [
[ 'fxiC6Y9ZyAM7BA35', 58 ],
[ 'fxiC6Y9ZyAM7BA35', 74 ],
[ 'fxiC6Y9ZyAM7BA35', 74 ]
],
'1z5WcPsr97Szv4TM': [
[ '1z5WcPsr97Szv4TM', 58 ],
[ '1z5WcPsr97Szv4TM', 74 ],
[ '1z5WcPsr97Szv4TM', 74 ]
],
HDcNgheglFuoZ78d: [
[ 'HDcNgheglFuoZ78d', 64 ],
[ 'HDcNgheglFuoZ78d', 82 ],
[ 'HDcNgheglFuoZ78d', 78 ]
],
x7IkUjDjikXTpubn: [
[ 'x7IkUjDjikXTpubn', 64 ],
[ 'x7IkUjDjikXTpubn', 82 ],
[ 'x7IkUjDjikXTpubn', 78 ]
],
'7lnJSC07g1PoDycH': [
[ '7lnJSC07g1PoDycH', 128 ],
[ '7lnJSC07g1PoDycH', 164 ],
[ '7lnJSC07g1PoDycH', 156 ]
]
}
- 映射每个组的值,并使用每个值计算总和
演示
const数据=[
{
fxiC6Y9ZyAM7BA35:58,
“1z5WcPsr97Szv4TM”:58,
HDcNgheglFuoZ78d:64,
x7IkUjDjikXTpubn:64,
“7lnJSC07g1PoDycH”:128,
},
{
fxiC6Y9ZyAM7BA35:74,
“1z5WcPsr97Szv4TM”:74,
HDcNgheglFuoZ78d:82,
x7IkUjDjikXTpubn:82,
“7lnJSC07g1PoDycH”:164,
},
{
fxiC6Y9ZyAM7BA35:74,
“1z5WcPsr97Szv4TM”:74,
HDcNgheglFuoZ78d:78,
x7IkUjDjikXTpubn:78,
“7lnJSC07g1PoDycH”:156,
},
];
const res=uu.chain(数据)
.flatMap(u.toPairs)
.groupBy(u.head)
.mapValues((pair)=>.reduce(pair,(sum,[[uu,val])=>sum+val,0))
.value();
控制台日志(res)代码>
使用lodash的..mergeWith()
并添加合并属性的值:
[代码>警察数据收集收集收集到的一些数据数据收集收集到的一些数据数据收集收集到的一些数据收集到的一些数据,例如:58,“HDCNGGHGGGGGGGGGGGGG78D:64,”X7-GGGGGGGGGGGGGGGGGGGU78D:64,“X7-IKUJJJJJJJJJJJJJJJKKKKKKUUU78D:4:64”,64,64,“X7-JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKJJJJJJJJJJJJJKKKKKKKKKKKKKK,“7lnJSC07g1PoDycH”:156}]
const result=\与({},…数据合并,(ov=0,sv)=>ov+sv)
console.log(结果)
条件是必需的,如果不是,+=不起作用谢谢你的回复。我应该发布我的进度,我已经非常接近了。谢谢!!