Giả sử chúng ta có mảng các mảng số như sau:
const arr = [[1, 45], [1, 34], [1, 49], [2, 34], [4, 78], [2, 67], [4, 65]];
Mỗi mảng con chứa đúng hai phần tử. Chúng ta cần viết hàm xây dựng mảng mới gom nhóm tất cả phần tử thứ hai của các mảng con có phần tử đầu tiên giống nhau.
Với mảng trên, kết quả nên là:
const output = [ [45, 34, 49], [34, 67], [78, 65] ];
Chúng ta có thể dùng Array.prototype.reduce() kết hợp Map() để xây dựng mảng cần thiết.
Ví dụ
Dưới đây là đoạn code:
const arr = [[1, 45], [1, 34], [1, 49], [2, 34], [4, 78], [2, 67], [4, 65]];
const constructSimilarArray = (arr = []) => {
const creds = arr.reduce((acc, val) => {
const { map, res } = acc;
if(!map.has(val[0])){
map.set(val[0], res.push([val[1]]) - 1);
}else{
res[map.get(val[0])].push(val[1]);
};
return { map, res };
}, {
map: new Map(),
res: []
});
return creds.res;
};
console.log(constructSimilarArray(arr));Kết quả
Đoạn code sẽ in ra console:
[ [ 45, 34, 49 ], [ 34, 67 ], [ 78, 65 ] ]