สมมติว่าเรามีอาร์เรย์ของวัตถุเช่นนี้ -
const arr = [ { 'name': 'JON', 'flight':100, 'value': 12, type: 'uns' }, { 'name': 'JON', 'flight':100, 'value': 35, type: 'sch' }, { 'name': 'BILL', 'flight':200, 'value': 33, type: 'uns' }, { 'name': 'BILL', 'flight':200, 'value': 45, type: 'sch' } ];
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของอ็อบเจ็กต์ดังกล่าว ฟังก์ชันควรแมปลบคีย์ 'value' และ 'type' ออกจากออบเจ็กต์และเพิ่มค่าเป็นคู่ค่าคีย์ไปยังออบเจ็กต์ที่เกี่ยวข้อง
ดังนั้นเอาต์พุตของอินพุตด้านบนควรมีลักษณะดังนี้ −
const output = [ { 'name': 'JON', 'flight':100, 'uns': 12, 'sch': 35 }, { 'name': 'BILL', 'flight':200, 'uns': 33, 'sch': 45} ];
ผลลัพธ์
รหัสสำหรับสิ่งนี้จะเป็น −
const arr = [ { 'name': 'JON', 'flight':100, 'value': 12, type: 'uns' }, { 'name': 'JON', 'flight':100, 'value': 35, type: 'sch' }, { 'name': 'BILL', 'flight':200, 'value': 33, type: 'uns' }, { 'name': 'BILL', 'flight':200, 'value': 45, type: 'sch' } ]; const groupArray = (arr = []) => { const res = arr.reduce(function (hash) { return function (r, o) { if (!hash[o.name]) { hash[o.name] = { name: o.name, flight: o.flight }; r.push(hash[o.name]); } hash[o.name][o.type] = (hash[o.name][o.type] || 0) + o.value; return r; } }(Object.create(null)), []); return res; }; console.log(groupArray(arr));
ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
[ { name: 'JON', flight: 100, uns: 12, sch: 35 }, { name: 'BILL', flight: 200, uns: 33, sch: 45 } ]