簡體   English   中英

使用 .reduce() 將數組轉換為對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM