สมมติว่าเรามีสองอาร์เรย์ อาร์เรย์แรกมีวันที่ที่กำหนดไว้สำหรับบางเหตุการณ์ และอาร์เรย์ที่สองมีชื่อของเหตุการณ์เหล่านั้น เช่นนี้ -
const dates = [ { id:"1", date:"2017-11-07" }, { id:"1", date:"2017-11-08" }, { id:"2", date:"2017-11-07" }, { id:"2", date:"2017-11-08" } ]; const names = [ { id:"1", name:"Pervies, Peter" }, { id:"2", name:"Ming, Edmund" } ];
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์สองอาร์เรย์ดังกล่าว และรวมชื่อเหตุการณ์กับวันที่ที่เกี่ยวข้องกันตามคุณสมบัติ id
ดังนั้น สำหรับอาร์เรย์เหล่านี้ ผลลัพธ์ควรมีลักษณะดังนี้ −
const output = [ { id:"1", name:"Pervies, Peter", details:[ {date:"2017-11-07"}, {date:"2017-11-08"} ] }, { id:"2", name:"Ming, Edmund", details:[ {date:"2017-11-07"}, {date:"2017-11-08"} ] } ]
ตัวอย่าง
รหัสสำหรับสิ่งนี้จะเป็น −
const dates = [ { id:"1", date:"2017-11-07" }, { id:"1", date:"2017-11-08" }, { id:"2", date:"2017-11-07" }, { id:"2", date:"2017-11-08" } ]; const names = [ { id:"1", name:"Pervies, Peter" }, { id:"2", name:"Ming, Edmund" } ]; const combineArrays = (dates, names) => { const res = []; dates.forEach(el => { const bool = !res.some(item => { return item.id == el.id; }); if(bool){ let combined = {}; combined.id = el.id; combined.details = combined.details || []; combined.details.push({ "date": el.date }); res.push(combined); }else{ res.find(item => { return item.id === el.id; }) .details.push({ "date": el.date }); }; }); res.forEach(el => { const bool = names.some(item => { return item.id === el.id; }); if(bool){ el.name = names.find(name => { return name.id === el.id; }).name; }; }); return res; }; console.log(JSON.stringify(combineArrays(dates, names), undefined, 4));
ผลลัพธ์
เอาต์พุตในคอนโซล −
[ { "id": "1", "details": [ { "date": "2017-11-07" }, { "date": "2017-11-08" } ], "name": "Pervies, Peter" }, { "id": "2", "details": [ { "date": "2017-11-07" }, { "date": "2017-11-08" } ], "name": "Ming, Edmund" } ]