Javascript从给定数组创建新数组

Javascript从给定数组创建新数组,javascript,arrays,object,ecmascript-6,merge,Javascript,Arrays,Object,Ecmascript 6,Merge,我有一个包含num和sum的对象数组 [ {num: 1, sum: 10}, {num: 1, sum: 2}, {num: 1, sum: 3}, {num: 2, sum: 1}, {num: 2, sum: 40}, {num: 2, sum: 100}, {num: 3, sum: 0}, {num: 4, sum: 0}, ] 我想要的是: [ {1: {count: 3, totalSum: 15}, {2: {coun

我有一个包含num和sum的对象数组

[
   {num: 1, sum: 10},
   {num: 1, sum: 2},
   {num: 1, sum: 3},
   {num: 2, sum: 1},
   {num: 2, sum: 40},
   {num: 2, sum: 100},
   {num: 3, sum: 0},
   {num: 4, sum: 0},
]
我想要的是:

[
   {1: {count: 3, totalSum: 15},
   {2: {count: 3, totalSum: 141},
   {3: {count: 1, totalSum: 0},
   {4: {count: 1, totalSum: 0},
]

非常感谢任何帮助

一个选项是
减少为一个由
num
s索引的对象,然后
将该对象映射为一个数组:

const input=[{num:1,sum:10},{num:1,sum:2},{num:2,sum:1},{num:2,sum:40},{num:2,sum:100},{num:3,sum:0},{num:4,sum:0},]
const outputObj=input.reduce((a,{num,sum})=>{
如果(!a[num])a[num]={count:0,totalSum:0};
a[num].count++;
a[num].totalSum+=sum;
返回a;
}, {});
const output=Object.entries(outputObj)
.map(([key,val])=>({[key]:val}));

控制台日志(输出)
您可以使用
reduce
方法对数组进行分组,然后使用另一种
reduce
方法查找每个键的
count
totalSum
属性

让arr=[{num:1,sum:10},{num:1,sum:2},{num:2,sum:1},{num:2,sum:40},{num:2,sum:100},{num:3,sum:0},{num:4,sum:0},]
var groupBy=函数(arr,键){
返回arr.reduce(功能(acc,x){
(acc[x[键]]=acc[x[键]]| |[])。按(x);
返回acc;
}, {});
};
设grouped=groupBy(arr,'num');
让结果=对象。键(分组)。减少(函数(acc,键){
设obj={[key]:{count:grouped[key].length,totalSum:grouped[key].map(a=>a.sum).reduce((a,b)=>a+b)}
附件推送(obj)
返回acc;
},[]);

控制台日志(结果)后代码示例,您尝试了多远到目前为止您尝试了什么?向我们展示一些代码您所需的结构无效,您打开了大括号,但从未关闭这些大括号。您确定这就是您所需的输出吗?使用键为1、2、3、4的单个对象不是更好吗?结果结构也没有多大意义。为什么要使用
num
作为嵌套对象的键?这是一个有趣的解决方案:
在同一个函数中分组
计数
。恭喜。