สมมติว่าเรามีข้อมูลต่อไปนี้เกี่ยวกับทีมที่จัดอยู่ในอาร์เรย์ของวัตถุ งานของเราคือการแปลงข้อมูลนี้เป็นวัตถุที่มีคีย์เป็นบทบาทและค่าเป็นอาร์เรย์ของชื่อผู้เล่น
อาร์เรย์ตัวอย่างของเรา -
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' ] }