สมมติว่าเรามีอาร์เรย์ของตัวอักษรสตริง / ตัวเลขที่มีค่าที่ซ้ำกันบางอย่างเช่นนี้ -
const array = ['day', 'night', 'afternoon', 'night', 'noon', 'night', 'noon', 'day', 'afternoon', 'day', 'night'];
เราจำเป็นต้องเขียนฟังก์ชัน groupSimilar() ที่ใช้ในอาร์เรย์นี้และคืนค่า newarray โดยที่รายการที่ซ้ำกันทั้งหมดจะถูกจัดกลุ่มเข้าด้วยกันในอาร์เรย์ย่อยเป็นองค์ประกอบแรกและนับรวมในอาร์เรย์ดั้งเดิมเป็นองค์ประกอบที่สอง
ในตัวอย่างนี้ ผลลัพธ์ควรเป็น −
[ [ 'day', 3 ], [ 'night', 4 ], [ 'afternoon', 2 ], [ 'noon', 2 ] ]
มาเขียนโค้ดสำหรับฟังก์ชันนี้กัน เราจะใช้ฟังก์ชัน Array.prototype.map() เพื่อสร้างอาร์เรย์ใหม่ จำเป็น และเราจะใช้ Map เพื่อติดตามรายการที่เกิดซ้ำในอาร์เรย์ -
ตัวอย่าง
const array = ['day', 'night', 'afternoon', 'night', 'noon', 'night', 'noon', 'day', 'afternoon', 'day', 'night']; const groupSimilar = arr => { return arr.reduce((acc, val) => { const { data, map } = acc; const ind = map.get(val); if(map.has(val)){ data[ind][1]++; } else { map.set(val, data.push([val, 1])-1); } return { data, map }; }, { data: [], map: new Map() }).data; }; console.log(groupSimilar(array));
ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็น -
[ [ 'day', 3 ], [ 'night', 4 ], [ 'afternoon', 2 ], [ 'noon', 2 ] ]