我正在尝试创建一个统计饼图。作为 http 响应
,我从服务器获取了一个列表,我需要使用它来绘制饼图。
例如:收到的数据:
[{1: 9, 2: 7}, {3:8, 2: 1}, {1:8, 5:9}, {2:3, 3:1}]
这是期望的输出:
[{x: 1, y: 17}, {x: 2, y:10}, {x: 3, y: 9}, {x: 5, y: 9}]
请注意:x 是键,y 是相似键值的总和
我试过 data.forEach((item, index) => {})
。写完这篇文章后,我实际上对如何组合 Object.keys(item)
、Object.values(item)
和 Object.values( item).reduce((a,b)=> 返回 a+b;)
这个问题听起来可能很愚蠢,但我们将不胜感激。 :)
最佳答案
你可以 reduce
阵列。创建一个累加器对象,每个数字作为键,并使用 x
和 y
键作为值。遍历每个对象并根据数字更新 y
值。然后使用 Object.values()
在返回的对象上获取累加器的值作为数组
const input = [{1: 9, 2: 7}, {3:8, 2: 1}, {1:8, 5:9}, {2:3, 3:1}]
const grouped = input.reduce((acc, obj) => {
for (const x in obj) {
acc[x] = acc[x] || { x , y: 0 }
acc[x].y += obj[x]
}
return acc;
}, {})
console.log(Object.values(grouped))
关于javascript - 基于数字键的对象数组的分组和总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56930544/