Computer >> Máy Tính >  >> Lập trình >> Javascript

JavaScript Chuyển mảng đối tượng thành đối tượng của mảng

Giả sử, chúng tôi có dữ liệu sau về một đội được sắp xếp trong một mảng đối tượng, nhiệm vụ của chúng tôi là chuyển đổi dữ liệu này thành một đối tượng có khóa là vai trò và giá trị là mảng tên người chơi.

Mảng mẫu của chúng tôi -

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'
}, ]

Hãy xác định một hàm objectify () nhận mảng làm đối số và trả về đối tượng tương ứng.

Mã cho điều này sẽ là -

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));

Ở đây, chúng tôi lặp lại từng mục mảng một, nếu nó tồn tại trong teamObject, chúng tôi đẩy playerith đến giá trị của nó, nếu không chúng tôi chỉ định nó một mảng với trình phát đơn lẻ

Đây là mã hoàn chỉnh -

Ví dụ

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));

Đầu ra

Đầu ra cho mã này trong bảng điều khiển sẽ là -

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