สมมติว่าเรามีอาร์เรย์ของวัตถุเช่นนี้ -
const arr =[ { ภูมิภาค:"แอฟริกา" ผลไม้:"สีส้ม" ผู้ใช้:"แกรี่" } { ภูมิภาค:"แอฟริกา" ผลไม้:"Apple" ผู้ใช้:"สตีฟ" } { ภูมิภาค:"ยุโรป" ผลไม้:"ส้ม" ผู้ใช้:"จอห์น" } { ภูมิภาค:"ยุโรป" ผลไม้:"Apple" ผู้ใช้:"บ๊อบ" } { ภูมิภาค:"เอเชีย" ผลไม้:"ส้ม", ผู้ใช้:"เอียน" } { ภูมิภาค:"เอเชีย" ผลไม้:"Apple" ผู้ใช้:"Angelo" } { ภูมิภาค:"แอฟริกา" ผลไม้:"สีส้ม" ผู้ใช้:"Gary" }];ก่อน>เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ดังกล่าว ฟังก์ชันควรเตรียมอาร์เรย์ใหม่ของออบเจ็กต์ที่จัดกลุ่มข้อมูลตามคุณสมบัติ "พื้นที่" ของออบเจกต์
ฟังก์ชันนี้ควรนับผู้ใช้ที่ไม่ซ้ำสำหรับพื้นที่เฉพาะด้วย
ดังนั้น สำหรับอาร์เรย์ข้างต้น ผลลัพธ์ควรมีลักษณะดังนี้ −
const output =[ { "region":"Africa", "count":2 }, { "region":"Europe", "count":2 }, { "region":"Asia", "count" ":2 }];ตัวอย่าง
รหัสสำหรับสิ่งนี้จะเป็น −
const arr =[ { ภูมิภาค:"แอฟริกา" ผลไม้:"สีส้ม" ผู้ใช้:"แกรี่" } { ภูมิภาค:"แอฟริกา" ผลไม้:"Apple" ผู้ใช้:"สตีฟ" } { ภูมิภาค:"ยุโรป" ผลไม้:"ส้ม" ผู้ใช้:"จอห์น" } { ภูมิภาค:"ยุโรป" ผลไม้:"Apple" ผู้ใช้:"บ๊อบ" } { ภูมิภาค:"เอเชีย" ผลไม้:"ส้ม", ผู้ใช้:"เอียน" } { ภูมิภาค:"เอเชีย" ผลไม้:"Apple" ผู้ใช้:"Angelo" } { ภูมิภาค:"แอฟริกา" ผลไม้:"สีส้ม" ผู้ใช้:"Gary" }];const groupByArea =(arr =[]) => { const res =[]; arr.forEach(el => { let key =[el.region, el.user].join('|'); if (!this[el.region]) { this[el.region] ={ ภูมิภาค:el .region นับ:0 }; res.push(this[el.region]); }; if (!this[key]) { this[key] =true; this[el.region].count++; }; } , Object.create(null)); return res;}console.log(groupByArea(arr));ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
[ { ภูมิภาค:'แอฟริกา' นับ:2 } { ภูมิภาค:'ยุโรป' จำนวน:2 } { ภูมิภาค:'เอเชีย' จำนวน:2 }]