Giả sử, chúng ta có một mảng các số như thế này -
const arr = [1, 6, 3, 1, 3, 1, 6, 3];
Chúng tôi được yêu cầu viết một hàm JavaScript lấy một mảng như vậy làm đối số đầu tiên và duy nhất. Sau đó, hàm sẽ tìm kiếm tất cả các số như vậy trong mảng xuất hiện với số lần lẻ (chỉ trừ một lần).
Ví dụ:
Trong mảng trên, cả số 1 và số 3 đều xuất hiện 3 lần (lẻ), vì vậy hàm của chúng ta nên loại bỏ lần xuất hiện thứ ba của cả hai số này.
Và mảng đầu ra sẽ giống như -
const output = [1, 6, 3, 1, 3, 6];
Chúng tôi sẽ chuẩn bị một bản đồ băm để theo dõi các lần xuất hiện của mỗi số và cuối cùng chúng tôi sẽ lặp lại trên bản đồ để xóa lần xuất hiện cuối cùng của số đó xuất hiện với số lần lẻ.
Mỗi khóa trong bản đồ của chúng tôi sẽ chứa một giá trị mảng, phần tử đầu tiên sẽ là số lần phần tử đó đã xuất hiện và phần tử thứ hai sẽ là chỉ mục cuối cùng mà nó xuất hiện.
Ví dụ
Mã cho điều này sẽ là -
const arr = [1, 6, 3, 1, 3, 1, 6, 3]; const removeOddOccurence = (arr =[]) => { // keeping the original array unaltered const copy = arr.slice(); const map = {}; arr.forEach((num, ind) => { if(map.hasOwnProperty(num)){ map[num][0]++; map[num][1] = ind; }else{ map[num] = [1, ind]; }; }); for(const key in map){ const [freq, index] = map[key]; if(freq !== 1 && freq % 2 === 1){ copy.splice(index, 1, ''); }; }; return copy.filter(el => el !== ''); }; console.log(removeOddOccurence(arr));
Đầu ra
Và đầu ra trong bảng điều khiển sẽ là -
[1, 6, 3, 1, 3, 6]