Vấn đề
Chúng ta cần viết một hàm JavaScript nhận vào một mảng số nguyên arr (có thể chứa trùng lặp) làm đối số thứ nhất, và một số num làm đối số thứ hai. Nhiệm vụ của hàm là lặp qua mảng và kiểm tra xem có phần tử nào xuất hiện nhiều hơn n lần hay không. Nếu có, xóa các lần xuất hiện thừa để giới hạn xuất hiện tối đa num lần.
Ví dụ, nếu đầu vào là:
Đầu vào
const arr = [4, 1, 3, 1, 4, 1, 3, 4, 2]; const num = 2;
Đầu ra
const output = [4, 1, 3, 1, 4, 3, 2];
Giải thích
Cả 4 và 1 đều xuất hiện 3 lần, nên lần xuất hiện thứ 3 bị xóa.
Ví dụ
Dưới đây là mã thực hiện:
const arr = [4, 1, 3, 1, 4, 1, 3, 4, 2];
const num = 2;
const deleteExtra = (arr = [], num = 1) => {
if (num === 0) { return []; }
const res = [];
const map = {};
for (let i = 0; i < arr.length; i++) {
const el = arr[i];
map[el] = (map[el] || 0) + 1;
if (map[el] <= num) {
res.push(el);
}
}
return res;
};
console.log(deleteExtra(arr, num));
Kết quả
[4, 1, 3, 1, 4, 3, 2]