可能有人被问过这样的题,来考验你对前端技术的基础知识。我们来简单的写两个实现方式
快速从数组中,删除重复超过2次的元素
示例一
function removeDuplicates(data) {
let news1 = [];
let news2 = [];
data.forEach((item, index) => {
if (news1.indexOf(item) === -1) {
news1.push(item);
} else {
if (news2.indexOf(item) === -1) {
news2.push(item);
} else {
data.splice(index, 1);
}
}
});
console.log(data);
}
let list = [1, 2, 1, 1, 2, 2, 3];
removeDuplicates(list); // 输出: [1, 1, 2, 2, 3]
注:这种简单易懂的处理方式可以实现要求,但是 data.splice(index, 1) 个别情况下会导致数组长度变化,从而影响循环的正确性
示例二
function removeDuplicates(arr) {
// 使用 Map 来记录每个元素出现的次数
const countMap = new Map();
// 使用数组来存储结果
const result = [];
arr.forEach(item => {
// 获取当前元素的计数,默认为 0
const count = countMap.get(item) || 0;
// 如果当前元素的计数小于 2,则将其添加到结果数组
if (count < 2) {
result.push(item);
}
// 更新当前元素的计数
countMap.set(item, count + 1);
});
return result;
}
const list = [1, 2, 1, 1, 2, 2, 3];
console.log(removeDuplicatesMoreThanTwice(list)); // 输出: [1, 1, 2, 2, 3]
解释:
- 使用 Map 对象 countMap 来记录每个元素的出现次数。
- 使用数组 result 来存储最终的结果。
- 遍历数组 arr 获取当前元素 item 的计数,默认为 0。如果当前元素的计数小于 2,则将其添加到结果数组 result 中。
- countMap.set(item, count + 1):更新当前元素 item 的计数。
- 这种效率更高且代码更简洁