Vấn đề
Chúng tôi được yêu cầu viết một hàm JavaScript có hai mảng, arr1 và arr2 lần lượt làm đối số đầu tiên và thứ hai.
Hàm sẽ tìm giao điểm (các phần tử chung giữa cả hai) của các mảng và nếu có các phần tử xuất hiện hai lần trong cả hai mảng, chúng ta cũng nên đưa chúng hai lần vào mảng kết quả của mình.
Ví dụ:nếu đầu vào của hàm là -
const arr1 = [2, 7, 4, 6, 7, 4]; const arr2 = [7, 1, 9, 7, 4, 5];
Sau đó, kết quả đầu ra phải là -
const output= [7, 7, 4];
Ví dụ
Mã cho điều này sẽ là -
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 mã:
Các bước chúng tôi đã thực hiện là -
-
Lặp qua mảng đầu tiên (arr1) để tìm sự xuất hiện của mỗi số không. trong đó.
-
Lặp qua mảng thứ hai (arr12) để tìm xem phần tử trong arr2 có tồn tại trong arr1 được ánh xạ hay không.
-
Nếu nó tồn tại, thì hãy giảm giá trị trong num1 được ánh xạ và đẩy phần tử vào mảng kết quả.
Đầu ra
Và đầu ra trong bảng điều khiển sẽ là -
[7, 7, 4]