Mô tả bài toán
Viết hàm nhận số lượng mảng tùy ý, trả về mảng các phần tử xuất hiện trong tất cả các mảng (giao nhau). Trả về mảng rỗng nếu không có phần tử chung.
Ví dụ minh họa
const arr1 = [2, 6, 7, 1, 7, 8, 4, 3];
const arr2 = [5, 7, 2, 2, 1, 3];
const arr3 = [1, 56, 345, 6, 54, 2, 68, 85, 3];
const intersection = (arr1, arr2) => {
const res = [];
for (let i = 0; i < arr1.length; i++) {
if (!arr2.includes(arr1[i])) continue;
res.push(arr1[i]);
}
return res;
};
const intersectMany = (...arrs) => {
let res = arrs[0].slice();
for (let i = 1; i < arrs.length; i++) {
res = intersection(res, arrs[i]);
}
return res;
};
console.log(intersectMany(arr1, arr2, arr3));
Kết quả
[2, 1, 3]
Cách viết hiện đại & hiệu quả
const intersectMany = (...arrs) => arrs.reduce((acc, arr) => acc.filter(x => new Set(arr).has(x)));
Lưu ý
Dùng Set để tra cứu O(1) thay vì includes() O(n), quan trọng với mảng lớn.