JavaScript 基於屬性分隔物件


假設我們有一個如下物件 −

const obj = {
   0: { "time": 1, "day": 1, },
   1: { "time": 2, "day": 1, },
   2: { "time": 3, "day": 1, },
   3: { "time": 1, "day": 2, },
   4: { "time": 2, "day": 2, },
   5: { "time": 3, "day": 2, }
};

我們需要編寫一個 JavaScript 函式,它接受一個這樣的物件,並按具有相同 day 鍵值對,將所有鍵值對組合到單獨的子物件中。

輸出

上述物件的輸出應為 −

const output = { '1':
{ '1': { time: 1, day: 1 },
'2': { time: 2, day: 1 },
'3': { time: 3, day: 1 } },
'2':
{ '1': { time: 1, day: 2 },
'2': { time: 2, day: 2 },
'3': { time: 3, day: 2 } }
}

示例

程式碼如下 −

const obj = {
   0: { "time": 1, "day": 1, },
   1: { "time": 2, "day": 1, },
   2: { "time": 3, "day": 1, },
   3: { "time": 1, "day": 2, },
   4: { "time": 2, "day": 2, },
   5: { "time": 3, "day": 2, }
};
const groupObject = obj => {
   let res = {};
   res = Object.values(obj).reduce((acc, val) => {
      if(acc[val['day']] === undefined){
         acc[val['day']] ={};
      };
      acc[val['day']][val['time']] = val;
      return acc;
   },{});
   return res;
};
console.log(groupObject(obj));

輸出

控制檯中的輸出 −

{
   '1': {
      '1': { time: 1, day: 1 },
      '2': { time: 2, day: 1 },
      '3': { time: 3, day: 1 }
   },
   '2': {
      '1': { time: 1, day: 2 },
      '2': { time: 2, day: 2 },
      '3': { time: 3, day: 2 }
   }
}

更新於: 12-10-2020

1K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告