簡體   English   中英

將 JavaScript object 重組為具有命名鍵的對象數組

[英]Restructure JavaScript object into array of objects with named keys

我有以下 JavaScript object:

const groupedData = {
  "1":[
    {"x":"2021-02-05","y":1},
    {"x":"2021-02-05","y":1},
    {"x":"2021-02-06","y":1}
  ],
  "2":[
    {"x":"2021-02-05","y":1},
    {"x":"2021-02-06","y":1},
    {"x":"2021-02-07","y":1},
    {"x":"2021-02-07","y":1},
    {"x":"2021-02-07","y":1},
    {"x":"2021-02-08","y":1}
  ]
}

我想將每個 arrays 中的對象按x分組,按y求和,並將數據塑造成稍微不同的結構,以便圖表庫可以使用它。 我有以下 function 成功進行分組和求和:

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},
      {"x":"2021-02-06","y":1}
    ]
  },
  {
    "name":"2",
    "data":[
      {"x":"2021-02-05","y":1},
      {"x":"2021-02-06","y":1},
      {"x":"2021-02-07","y":3},
      {"x":"2021-02-08","y":1}
    ]
  }
]

我正在努力想出一種巧妙的方法來完成格式化的最后一部分。 誰能建議如何以簡潔的方式修改格式 function 以實現最后一步?

非常感謝

您可以 map object 的條目並將值分組。

 const data = { 1: [{ x: "2021-02-05", y: 1 }, { x: "2021-02-05", y: 1 }, { x: "2021-02-06", y: 1 }], 2: [{ x: "2021-02-05", y: 1 }, { x: "2021-02-06", y: 1 }, { x: "2021-02-07", y: 1 }, { x: "2021-02-07", y: 1 }, { x: "2021-02-07", y: 1 }, { 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; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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