Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.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,我已经在这里梳理了一些例子,我可以找到我想要的答案。我只是想把我的大脑放在javascript数组操作上,所以我甚至不确定我的代码是否接近 我的页面上的网格中有多行。每个都有一个参考代码(udmatlref)和一个值(udmatltotal)。我想做的是为包含匹配参考代码的每一行输出一个累积总计列表 例如,我可能有 row#1: name:"test1" value: 904 row#2: name:"test2" value: 796.5 row#3:

我已经在这里梳理了一些例子,我可以找到我想要的答案。我只是想把我的大脑放在javascript数组操作上,所以我甚至不确定我的代码是否接近

我的页面上的网格中有多行。每个都有一个参考代码(udmatlref)和一个值(udmatltotal)。我想做的是为包含匹配参考代码的每一行输出一个累积总计列表

例如,我可能有

row#1: name:"test1" value: 904 
row#2: name:"test2" value: 796.5
row#3: name:"test1" value: 85
row#4: name:"test2" value: 907
我希望结果表明:

name:"test1" value:  989
name:"test2" value:  1703.5
使用stackoverflow中的内容,我编写了以下代码。这段代码创建一个原始值的初始数组,然后将这些值分组到一个新数组中。所以我觉得我很接近


功能参考总计(s、e){
var-arr=[];
对于(var i=0;i{
const found=acc.find(a=>a.name==d.name);
常量值={value:d.value};
如果(!找到){
acc.push({name:d.name,数据:[value]})
}
否则{
找到.data.push(值)
}
返回acc;
}, []);
控制台日志(结果);
}  
控制台日志输出如下所示:

[
{data:[{value:904},{value:85}],name:'test1'},
{data:[{value:796.5},{value:907}],name:'test2'}
]
有人能帮我记录一下吗

"test1" - 989
"test2" - 1703.5

谢谢大家!

根据当前代码,
arr
变量是一个对象数组,每个对象都有一个
名称和

我们可以将其转换为一个对象,其中键是
名称
,值是该
名称
的所有
的总和:

const sumByName={}
arr.forEach(({name,value})=>{
如果(!sumByName[名称]){
sumByName[名称]=0;
}
sumByName[name]+=值
})
运行此代码后,
sumByName
将是如下对象:

{
“test1”:989,
“测试2”:1703.5
}
然后,我们可以迭代此对象的条目,将您想要的内容记录到控制台:

Object.entries(sumByName).forEach(([name,sum])=>{
console.log(`${name}“-${sum}`)
})
把它放在一起 可以调整您现有的代码,以便我们直接构建
sumByName
,而不是首先构建
arr

函数参考总计(s、e){
const sumByName={}
for(设i=0;i
请将JSON格式的数组/对象添加到问题中。像这样?{“0”:{“name”:“test1”,“data”:[{“value”:904},{“value”:85}]},“1”:{“name”:“test2”,“data”:[{“value”:796.5},{“value”:907}]}这是实际的输入结构,还是数组?更像是
行=[{name:“test1”,值:904},{name:“test2”,值:796.5},{name:“test1”,值:85},{name:“test2”,值:907}]
?如果这个猜测是正确的,那么
rows.reduce((a,{name,value})=>({…a,[name]:(a[name]| | 0)+value}),{})应该产生
{“test1”:989,“test2”:1703.5}
。如果没有,您可以将
行。reduce(…)
替换为
对象。值(行)。reduce(…)
。这正是我需要的!感谢您提供了如此干净的代码,并对其进行了分解,以帮助我了解它是如何完成的!