繁体   English   中英

javascript将对象数组转换为单行总和

[英]javascript Convert array of objects to single row of sum

我想将所有行加到javascript数组中的一行

var input=[
    {id: 'id1', type: "A", active: 3},
    {id: 'id2', type: "A", active: 5},
    {id: 'id3', type: "B", active: 3},
    {id: 'id4', type: "B", active: 4},
    {id: 'id5', type: "C", active: 8},
    {id: 'id6', type: "C", active: 5},
    {id: 'id7', type: "C", active: 6},
    {id: 'id8', type: "C", active: 7},
];

预期产出

[
    {id: NaN, type: NaN, active: 41}
]

 var input=[ {id: 'id1', type: "A", active: 3}, {id: 'id2', type: "A", active: 5}, {id: 'id3', type: "B", active: 3}, {id: 'id4', type: "B", active: 4}, {id: 'id5', type: "C", active: 8}, {id: 'id6', type: "C", active: 5}, {id: 'id7', type: "C", active: 6}, {id: 'id8', type: "C", active: 7}, ]; const t1 = performance.now(); var output=[{}];Object.keys(input[0]).forEach(function(item){ var s=0; input.forEach(function(itema){ s+=parseInt(itema[item]); }); if(!isNaN(s)) output[0][item]=s; else output[0][item]=''; }) const t2 = performance.now(); console.log('output:', output, `in ${t2 - t1}ms`);

还有其他更简单的方法吗? 提前致谢

您可以使用reduce来对每个对象中的每个条目进行整数求和。

 const input = [{"id":"id1","type":"A","active":3},{"id":"id2","type":"A","active":5},{"id":"id3","type":"B","active":3},{"id":"id4","type":"B","active":4},{"id":"id5","type":"C","active":8},{"id":"id6","type":"C","active":5},{"id":"id7","type":"C","active":6},{"id":"id8","type":"C","active":7}]; const t1 = performance.now(); const output = input.reduce((acc, obj) => Object.fromEntries( Object.entries(acc).map(([key, val]) => [ key, parseInt(val, 10) + parseInt(obj[key], 10), ]) ) ); const t2 = performance.now(); console.log(output, `in ${t2 - t1}ms`);

这应该适用于任何平面对象结构,前提是数组中的所有对象都是相同的形状。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM