[英]Transform an Array into an Object using .reduce()
我正在尝试研究Array.reduce
。 我被赋予了以下任务:
输入数据:
const report = [
{
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 result = report.reduce((acc, dataItem) => {
let outputArray = [];
if (dataItem) {
outputArray.push({ ...dataItem, date: dataItem.dateOfReport, [dataItem.userId]: dataItem.userMetric });
}
return outputArray;
});
return result;
更正了逻辑
const report = [ { 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 result = report.reduce((acc, dataItem) => { const node = acc.find(item => item.dateOfReport === dataItem.dateOfReport); if (node) { node[dataItem.userId] = dataItem.userMetric; } else { acc.push({ dateOfReport: dataItem.dateOfReport, [dataItem.userId]: dataItem.userMetric }); } return acc; }, []); console.log(result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.