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 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始使用
广告