如何解决将 JavaScript 对象重组为具有命名键的对象数组
我有以下 JavaScript 对象:
const groupedData = {
"1":[
{"x":"2021-02-05","y":1},{"x":"2021-02-05",{"x":"2021-02-06","y":1}
],"2":[
{"x":"2021-02-05",{"x":"2021-02-07",{"x":"2021-02-08","y":1}
]
}
我想将每个数组中的对象按 x
分组并按 y
求和,并将数据塑造成稍微不同的结构,以便图表库可以使用它。我有以下功能可以成功进行分组和求和:
const formattedData = [];
Object.keys(groupedData).map((key) => {
var totals = groupedData[key].reduce(function (r,o) {
(r[o.x]) ? r[o.x] += o.y : r[o.x] = o.y;
return r;
},{});
formattedData.push({ 'name': key,'data': totals })
});
输出如下:
[
{
"name":"1","data": {
"2021-02-05":2,"2021-02-06":1
}
},{
"name":"2","data": {
"2021-02-05":1,"2021-02-06":1,"2021-02-07":3,"2021-02-08":1
}
}
]
但是,我希望数据采用以下格式:
[
{
"name":"1","data":[
{"x":"2021-02-05","y":2},"y":1}
]
},"y":3},"y":1}
]
}
]
我正在努力想出一种巧妙的方法来完成格式化的最后一部分。谁能建议如何修改格式化功能以简洁的方式实现最后一步?
非常感谢
解决方法
您可以映射对象的条目并对值进行分组。
const
data = { 1: [{ x: "2021-02-05",y: 1 },{ x: "2021-02-05",{ x: "2021-02-06",y: 1 }],2: [{ x: "2021-02-05",{ x: "2021-02-07",{ x: "2021-02-08",y: 1 }] },result = Object.entries(data).map(([name,data]) => ({
name,data: Object.values(data.reduce((r,{ x,y }) => {
r[x] ??= { x,y: 0 };
r[x].y += y;
return r;
},{}))
}));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。