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