對 JavaScript 中的陣列值進行分組


假設我們有一個包含某些年和週數據且類似這樣的物件陣列 −

const arr = [
   {year: 2017, week: 45},
   {year: 2017, week: 46},
   {year: 2017, week: 47},
   {year: 2017, week: 48},
   {year: 2017, week: 50},
   {year: 2017, week: 52},
   {year: 2018, week: 1},
   {year: 2018, week: 2},
   {year: 2018, week: 5}
];

我們需要編寫一個 JavaScript 函式,此函式接收一個這樣的陣列。該函式應該返回一個新陣列,其中所有具有 "年份" 屬性的相同值的物件都分組到一個單獨的物件中。

因此,以上陣列的輸出物件應如下所示 −

[
   { 2017 : [{
      week: 45,
      week: 46,
      week: 47,
      week: 48,
      week: 50,
      week: 53
   },
   { 2018 : [{
      week: 1,
      week: 2,
      week: 5
   }]
]

示例

程式碼如下 −

const arr = [
   {year: 2017, week: 45},
   {year: 2017, week: 46},
   {year: 2017, week: 47},
   {year: 2017, week: 48},
   {year: 2017, week: 50},
   {year: 2017, week: 52},
   {year: 2018, week: 1},
   {year: 2018, week: 2},
   {year: 2018, week: 5}
];
const groupByYear = arr => {
   const res = [];
   const map = {};
   arr.forEach(item => {
      const temp = {};
      if (!map[item.year]) {
         map[item.year] = [];
         temp[item.year] = map[item.year];
         res.push(temp);
      };
      map[item.year].push({ value: item.week });
   });
   return res;
};
console.log(JSON.stringify(groupByYear(arr), undefined, 4));

輸出

控制檯中的輸出 −

[
   {
      "2017": [
         {
            "value": 45
         },
         {
            "value": 46
         },
         {
            "value": 47
         },
         {
            "value": 48
         },
         {
            "value": 50
         },
         {
            "value": 52
         }
      ]
   },
   {
      "2018": [
         {
            "value": 1
         },
         {
            "value": 2
         },
         {
            "value": 5
         }
      ]
   }
]

更新於: 12-Oct-2020

398 次瀏覽

開啟你的職業生涯

透過完成課程取得認證

開始
廣告
© . All rights reserved.