Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

การจัดกลุ่มอาร์เรย์และการนับรายการสร้างอาร์เรย์ใหม่ตามกลุ่มใน JavaScript


สมมติว่าเรามีอาร์เรย์ของวัตถุเช่นนี้ -

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 }]