Gộp các mục trùng lặp thành nhóm trong JavaScript
Chúng ta có một mảng số có các mục trùng lặp. Chúng ta cần viết một hàm nhận vào mảng và gom tất cả các mục trùng lặp thành một mảng con và trả về mảng mới được hình thành.
Ví dụ: Nếu mảng đầu vào là:
const arr = [234, 65, 65, 2, 2, 234];
// thì kết quả đầu ra nên là:
const output = [[234, 234], [65, 65], [2, 2]];
Chúng ta sẽ dùng Hashmap để theo dõi các phần tử đã xảy ra và lặp qua mảng bằng vòng lặp for.
Do đó, hãy viết mã cho hàm này:
Ví dụ
Mã thực hiện như sau:
const arr = [234, 65, 65, 2, 2, 234];
const groupArray = arr => {
const map = {};
const group = [];
for(let i = 0; i < arr.length; i++){
if(typeof map[arr[i]] === 'number'){
group[map[arr[i]]].push(arr[i]);
}else{
// phương thức push trả về độ dài mới của mảng
// và chỉ số của phần tử mới đẩy là length-1
map[arr[i]] = group.push([arr[i]])-1;
}
};
return group;
}
console.log(groupArray(arr));
Đầu ra
Kết quả trong console sẽ là:
[ [ 234, 234 ], [ 65, 65 ], [ 2, 2 ] ]