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]