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

Tìm giao nhau của hai mảng bao gồm phần tử trùng lặp trong JavaScript


Vấn đề

Cần viết hàm JS nhận hai mảng arr1, arr2. Tìm giao nhau (phần tử chung) và nếu phần tử xuất hiện 2 lần trong cả hai mảng, kết quả cũng chứa 2 lần.

Ví dụ:

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

Kết quả:

const output= [7, 7, 4];

Ví dụ

Mã thực hiện:

const arr1 = [2, 7, 4, 6, 7, 4]; const arr2 = [7, 1, 9, 7, 4, 5]; const intersect = (arr1 = [], arr2 = []) => {    const map = {};    arr1.forEach(a => {       map[a] = map[a] ? map[a] + 1 : 1;    })    const result = [];    for(let key of arr2) {       if(key in map && map[key] > 0) {          result.push(key);          map[key]--;       }    }    return result; }; console.log(intersect(arr1, arr2));

Giải thích code:

Các bước:

  • Duyệt mảng đầu để đếm tần suất.

  • Duyệt mảng hai, nếu phần tử tồn tại trong map và count>0 thì push vào kết quả, giảm count.

Kết quả

Kết quả in ra console:

[7, 7, 4]