สมมุติว่าเรามีอาร์เรย์ของวัตถุที่มีข้อมูลเกี่ยวกับรถบางคันเช่นนี้ −
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 ที่รับอาร์เรย์ของอ็อบเจ็กต์ดังกล่าว ฟังก์ชันควรจัดกลุ่มอ็อบเจ็กต์ของอาร์เรย์นี้ตามคุณสมบัติของกลุ่มของแต่ละอ็อบเจ็กต์ หากคุณสมบัติของกลุ่มมีองค์ประกอบมากกว่าหนึ่งรายการ วัตถุนั้นควรปรากฏในทั้งสองกลุ่ม
ดังนั้น] สำหรับอาร์เรย์ข้างต้น ผลลัพธ์ควรมีลักษณะดังนี้ −
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" } ] } ]