Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Tìm phần tử chung của nhiều mảng trong JavaScript

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.