【发布时间】:2021-12-30 04:17:03
【问题描述】:
我在这里Transform an Array into an Object using .reduce() 提出了类似的问题,但是我正在尝试使用 findIndex 找到替代解决方案。
这个输入数据:
const reports = [
{
dateOfReport: "11-01-2021",
userId: "id1",
userMetric: { first_metric: 10, second_metric: 15 },
},
{
dateOfReport: "11-01-2021",
userId: "id2",
userMetric: { first_metric: 9, second_metric: 14 },
},
{
dateOfReport: "12-01-2021",
userId: "id1",
userMetric: { first_metric: 11, second_metric: 14 },
},
{
dateOfReport: "12-01-2021",
userId: "id2",
userMetric: { first_metric: 16, second_metric: 19 },
},
];
输出数据必须是:
const output = [
{
dateOfReport: "11-01-2021",
id1: { first_metric: 10, second_metric: 15 },
id2: { first_metric: 9, second_metric: 14 },
},
{
dateOfReport: "12-01-2021",
id1: { first_metric: 11, second_metric: 14 },
id2: { first_metric: 16, second_metric: 19 },
},
];
我尝试在下面编写类似的代码,但输出中出现重复数据。谁能帮忙解决这个问题?
const groupedReports = reports.reduce((acc, dataItem) => {
const nodeIndex = acc.findIndex((item) => item.dateOfReport === dataItem.dateOfReport);
const newNode = { date: dataItem.date, [dataItem.userId]: dataItem.userMetric };
console.log("NEW NODE", newNode);
return [...acc.slice(0, nodeIndex - 1), newNode, ...acc.slice(nodeIndex + 1)]
}, []);
【问题讨论】:
标签: javascript arrays reduce