[英]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.