我想要绘制一张图表,但数据需要按特定方式格式化。我最终将数据转换为正确的形式,但发现有一些值缺失。
我有一个日期数组:
const labels = ["Sep.08", "Sep.09", "Sep.12", "Sep.13", "Sep.14"]
我有一个包含name
、date
和count
的对象数组:
const Data = [
{date: "Sep.08", name: "User1", count: 8},
{date: "Sep.08", name: "User2", count: 2},
{date: "Sep.09", name: "User2", count: 3},
{date: "Sep.09", name: "User3", count: 1},
{date: "Sep.12", name: "User1", count: 11},
{date: "Sep.13", name: "User1", count: 3},
{date: "Sep.13", name: "User2", count: 3},
{date: "Sep.14", name: "User2", count: 7},
]
我想要达成的目标:
- 每个姓名都应该在新对象中有一个数组
- 每个日期都应该在数组中表示,以便每个数组具有相同的长度。如果用户没有表示标签数组中某个日期的对象,则应在新数组的该索引处添加零。
我的期望结果是:
const result = {
User1: [8,0,11,3,0], //0's where user has no object with the dates of "Sep.09" & "Sep.14"
User2: [2,3,0,3,7],
User3: [0,1,0,0,0],
}
我正在使用.reduce
来创建我的新对象:
const Data = [
{date: "Sep.08", name: "User1", count: 8},
{date: "Sep.08", name: "User2", count: 2},
{date: "Sep.09", name: "User2", count: 3},
{date: "Sep.09", name: "User3", count: 1},
{date: "Sep.12", name: "User1", count: 11},
{date: "Sep.13", name: "User1", count: 3},
{date: "Sep.13", name: "User2", count: 3},
{date: "Sep.14", name: "User2", count: 7},
]
const labels = ["Sep.08", "Sep.09", "Sep.12", "Sep.13","Sep.14"]
const groups = Data.reduce((acc, obj) => {
if (!acc[obj.name]) {
acc[obj.name] = [];
}
acc[obj.name].push(obj.count);
return acc;
}, {});
console.log(groups)