JavaScript 將物件陣列轉換成陣列的物件


假設我們有以下以物件陣列排列的有關團隊的資料,我們的任務是將此資料轉換為以角色為鍵、以玩家名稱陣列為值的物件。

我們的示例陣列 −

const team = [{
   role: 'Batsman',
   player: 'V Kohli'
}, {
   role: 'Wicket Keeper',
   player: 'KL Rahul'
}, {
   role: 'Batsman',
   player: 'R Sharma'
}, {
   role: 'Wicket Keeper',
   player: 'R Pant'
}, {
   role: 'Bowler',
   player: 'B Kumar'
}, {
   role: 'Bowler',
   player: 'M Shami'
}, ]

讓我們定義一個函式 objectify(),它將陣列作為引數並返回相應的物件。

程式碼如下 −

const objectify = (team) => {
   const teamObject = {};
   team.forEach(member => {
      if(teamObject[member.role]){
         teamObject[member.role].push(member.player);
      }else{
         teamObject[member.role] = [member.player];
      }
   });
   return teamObject;
}
console.log(objectify(team));

在這裡,我們挨個遍歷每個陣列項,如果它存在於 teamObject 中,我們將該玩家推入其中;否則,我們將為其分配一個包含單個玩家的陣列

以下為完整程式碼 −

示例

const team = [{
   role: 'Batsman',
   player: 'V Kohli'
}, {
   role: 'Wicket Keeper',
   player: 'KL Rahul'
}, {
   role: 'Batsman',
   player: 'R Sharma'
}, {
   role: 'Wicket Keeper',
   player: 'R Pant'
}, {
   role: 'Bowler',
   player: 'B Kumar'
}, {
   role: 'Bowler',
   player: 'M Shami'
}, ]
   const objectify = (team) => {
      const teamObject = {};
      team.forEach(member => {
         if(teamObject[member.role]){
            teamObject[member.role].push(member.player);
         }else{
            teamObject[member.role] = [member.player];
      }
   });
   return teamObject;
}
console.log(objectify(team));

輸出

此程式碼在控制檯中的輸出如下 −

{
   Batsman: [ 'V Kohli', 'R Sharma' ],
   WicketKeeper: [ 'KL Rahul', 'R Pant' ],
   Bowler: [ 'B Kumar', 'M Shami' ]
}

更新於: 19-8-2020

745 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始使用
廣告