จัดกลุ่มเอลีเมนต์ที่เหมือนกันในอาร์เรย์ ให้อยู่ใน Sub-array เดียวกัน (Group Identical Elements)
ตัวอย่าง
[234, 65, 65, 2, 2, 234] → [[234, 234], [65, 65], [2, 2]]
ตัวอย่างโค้ด
const groupArray = arr => {
const map = {};
const groups = [];
for (const val of arr) {
if (typeof map[val] === 'number') {
groups[map[val]].push(val);
} else {
map[val] = groups.push([val]) - 1;
}
}
return groups;
};
console.log(groupArray([234, 65, 65, 2, 2, 234]));
ผลลัพธ์
[ [ 234, 234 ], [ 65, 65 ], [ 2, 2 ] ]
วิธีแบบ Reduce + Map (Functional)
const groupArray = arr =>
[...arr.reduce((map, val) => {
map.set(val, [...(map.get(val) || []), val]);
return map;
}, new Map()).values()];
ใช้ Map เก็บอาร์เรย์ของแต่ละค่า แล้วดึง .values() ออกมา