สมมติว่ามีอาร์เรย์ของออบเจ็กต์ที่มีข้อมูลเกี่ยวกับรถยนต์บางคันดังนี้:
const arr = [
{
"group":[],
"name": "All Makes",
"code": ""
},
{
"group":["Group A"],
"name": "BMW",
"code": "X821"
},
{
"group":["Group B"],
"name": "Audi",
"code": "B216"
},
{
"group":["Group B"],
"name": "Ford",
"code": "P385"
},
{
"group":["Group B", "Group C"],
"name": "Mercedes",
"code": "H801"
},
{
"group":["Group C"],
"name": "Honda",
"code": "C213"
}
];
เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของออบเจ็กต์ดังกล่าว ฟังก์ชันควรจัดกลุ่มออบเจ็กต์ของอาร์เรย์นี้ตามคุณสมบัติ group ของแต่ละออบเจ็กต์ ถ้าคุณสมบัติ group มีมากกว่าหนึ่งองค์ประกอบ ออบเจ็กต์นั้นควรปรากฏในทั้งสองกลุ่ม
ดังนั้น สำหรับอาร์เรย์ข้างต้น ผลลัพธ์ควรเป็นดังนี้:
const output = [
{
"group": "Group A",
"cars": [
{
name: "BMW",
code: "X821"
}
]
},
{
"group": "Group B",
"cars": [
{ name: "Audi", code: "B216" },
{ name: "Ford", code: "P385" },
{ name: "Mercedes", code: "H801" }
]
},
{
"group": "Group C",
"cars": [
{ name: "Mercedes", code: "H801" },
{ name: "Honda", code: "C213" }
]
}
];
ตัวอย่าง
โค้ดสำหรับนี้จะเป็นดังนี้:
const arr = [
{
"group":[],
"name": "All Makes",
"code": ""
},
{
"group":["Group A"],
"name": "BMW",
"code": "X821"
},
{
"group":["Group B"],
"name": "Audi",
"code": "B216"
},
{
"group":["Group B"],
"name": "Ford",
"code": "P385"
},
{
"group":["Group B", "Group C"],
"name": "Mercedes",
"code": "H801"
},
{
"group":["Group C"],
"name": "Honda",
"code": "C213"
}
];
const groupTogether = (arr = []) => {
let res = []
res = Object.entries(arr.reduce((acc, { group, ...r }) => {
group.forEach(key => acc[key] = (acc[key] || []).concat({...r}));
return acc;
}, {}))
return res.map(([group, arr]) => ({ group, arr }));
};
console.log(JSON.stringify(groupTogether(arr), undefined, 4));
ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็นดังนี้:
[
{
"group": "Group A",
"arr": [
{
"name": "BMW",
"code": "X821"
}
]
},
{
"group": "Group B",
"arr": [
{ "name": "Audi", "code": "B216" },
{ "name": "Ford", "code": "P385" },
{ "name": "Mercedes", "code": "H801" }
]
},
{
"group": "Group C",
"arr": [
{ "name": "Mercedes", "code": "H801" },
{ "name": "Honda", "code": "C213" }
]
}
]