Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对象数组中的分组和求和_Javascript_Arrays - Fatal编程技术网

Javascript 对象数组中的分组和求和

Javascript 对象数组中的分组和求和,javascript,arrays,Javascript,Arrays,我试图在我的roomList数组中找到每种类型的总和。。。尝试了reduce,但它只返回最后一个值。有没有一种方法可以通过使用reduce。。。我对其他方法也持开放态度 let roomList=[ {value:1,type:2},{value:2,type:2},{value:3,type:2},{value:4,type:3}, {value:5,type:4},{value:6,type:4},{value:7,type:6},{value:8,type

我试图在我的roomList数组中找到每种类型的总和。。。尝试了reduce,但它只返回最后一个值。有没有一种方法可以通过使用reduce。。。我对其他方法也持开放态度

let roomList=[
        {value:1,type:2},{value:2,type:2},{value:3,type:2},{value:4,type:3}, 
        {value:5,type:4},{value:6,type:4},{value:7,type:6},{value:8,type:6}, 
        {value:9,type:1},{value:10,type:8},{value:11,type:8},{value:12,type:8}
];
roomList.reduce((acc,obj)=>{
   acc[obj.type]=obj.value;
   return acc;
},{})

我希望得到这样的结果{1:9,2:6,3:4,4:11…}

您只得到最后一个值,因为您覆盖了而没有添加。将reduce代码更改为:

roomList.reduce((acc,obj)=>{
    acc[obj.type] = (acc[obj.type] || 0) + obj.value;
    return acc;
},{})
要澄清这一点:

acc[obj.type] = (acc[obj.type] || 0) + obj.value;
我们不能简单地这样做:

acc[obj.type] += obj.value;

因为acc[obj.type]可能未初始化,因此返回未定义的值。相反,我们使用acc[obj.type]| | 0来检索该值,如果该值不正确,则使用值0。

您只获取最后一个值,因为您覆盖了该值,而没有添加该值。将reduce代码更改为:

roomList.reduce((acc,obj)=>{
    acc[obj.type] = (acc[obj.type] || 0) + obj.value;
    return acc;
},{})
要澄清这一点:

acc[obj.type] = (acc[obj.type] || 0) + obj.value;
我们不能简单地这样做:

acc[obj.type] += obj.value;

因为acc[obj.type]可能未初始化,因此返回未定义的值。相反,我们使用acc[obj.type]| | 0来检索值,如果值不正确,则使用值0。

您可以使用map来累积值

让roomList=[{value:1,type:2},{value:2,type:2},{value:3,type:2},{value:4,type:3},{value:5,type:4},{value:6,type:4},{value:7,type:6},{value:8,type:6},{value:9,type:1},{value:10,type:8},{value:11,type:8},{value:12,type:8}]; g={} roomList.mapo=>{ !g[o.type]?g[o.type]=o.value:g[o.type]=g[o.type]+o.value }
logg您可以使用map来累积值

让roomList=[{value:1,type:2},{value:2,type:2},{value:3,type:2},{value:4,type:3},{value:5,type:4},{value:6,type:4},{value:7,type:6},{value:8,type:6},{value:9,type:1},{value:10,type:8},{value:11,type:8},{value:12,type:8}]; g={} roomList.mapo=>{ !g[o.type]?g[o.type]=o.value:g[o.type]=g[o.type]+o.value } console.logg