javascript - JavaScript 地图归约函数
问题描述
我是 javascript 新手,使用 JSON 数据源尝试聚合数据以在网页上正确显示,并且此数据集会根据用户活动进行子集化。其中一些数据集可以达到 100 条记录,因此快速很重要。
//Here is my data
{
"metadata": {
"mm": {
"filter": false
}
},
"categories": [{
"data": [
],
"name": "category_one"
},
{
"data": [{
"name": "13_WH1",
"attributes": {
"bv": 145
},
"vm": [
4.0,
8.0,
6.0,
6.0
]
},
{
"name": "32_WH2",
"attributes": {
"bv": 155
},
"vm": [
5.0,
7.0,
7.0,
2.0
]
}
],
"name": "category_two"
}
]
}
function sumVm(data_set) {
data_set.map(function(series, index) {
const total_vm = series.data.reduce(
(accumulator, record) => accumulator + record.vm,
0
);
console.log(total_vm)
return total_vm
})
};
当我调用该函数时,这是我的结果(只是重复每条记录,而不是按位置添加。
sumVm(jsonData)
# 04,8,6,65,7,7,2
我想要的结果是:
# 9,15,13,8
任何建议都会非常有帮助,谢谢
解决方案
这是一种方法。平面映射,然后使用 foreach 构建一个新的值数组。
let jsonData = [{
"foo": "bar",
"data": [{
"name": "13_WH1",
"attributes": {
"bv": 145,
},
"vm": [
4.0,
8.0,
6.0,
6.0
]
},
{
"name": "32_WH2",
"attributes": {
"bv": 155,
},
"vm": [
5.0,
7.0,
7.0,
2.0
]
}
]
}]
function sumVm(data_set) {
let a = []
let d = data_set.flatMap(e => e.data.map(d => d.vm));
d.forEach(e => e.forEach((f, i) => {
if (!a[i]) a[i] = 0;
a[i] = a[i] + f
}))
return a
};
console.log(sumVm(jsonData))
// 9,15,13,8