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

Tìm giao của các mảng chứa phần tử lặp trong JavaScript

Chúng ta cần viết một hàm JavaScript nhận vào hai mảng số, gọi chúng là arr1 và arr2.

Hàm nên xây dựng một mảng thứ ba dựa trên hai mảng đầu vào chứa tất cả các phần tử chung cho cả arr1 và arr2.

Lưu ý nếu có nhiều hơn một phần tử giống nhau xuất hiện trong cả hai mảng thì phải xem xét tất cả các instance của phần tử đó.

Ví dụ:

Nếu mảng đầu vào là:

const arr1 = [1, 2, 2, 4, 4, 5, 6]; const arr2 = [3, 2, 4, 2, 4, 9];

Thì mảng đầu ra nên là:

const output = [2, 2, 4, 4];

Ví dụ

Dưới đây là mã nguồn:

const arr1 = [1, 2, 2, 4, 4, 5, 6]; const arr2 = [3, 2, 4, 2, 4, 9]; const findIntersection = (arr1 = [], arr2 = []) => {    const map = new Map();    for (const el of arr2) {       const count = map.get(el) || 0;       map.set(el, count + 1);    };    return arr1.filter(el => {       let count = map.get(el);       if (count) {          map.set(el, --count);          return true;       }       return false;    }); }; console.log(findIntersection(arr1, arr2));

Kết quả

Đầu ra trên console:

[2, 2, 4, 4]

Giải thích: Dùng Map đếm tần suất arr2, duyệt arr1 lấy phần tử nếu còn count > 0 trong map. Độ phức tạp O(n+m), giữ thứ tự arr1.