如何用JavaScript移除数组重复元素,保留仅出现一次的元素?
解决数组中仅保留单次出现元素的问题
问题说明
给定数组:
let arr = [100, 123, 100, 122, 119, 203, 123, 76, 89]
需要移除所有重复出现的元素,最终得到仅出现一次的元素数组:[122,119,203,76,89]
原代码的问题
你写的代码存在两处问题:
- 函数调用时传入的
num未定义,应该传入已声明的arr - 当前
filter的逻辑data.indexOf(val) === ind是保留每个元素第一次出现的实例,而非仅保留整个数组中只出现一次的元素,执行后会得到[100,123,122,119,203,76,89],不符合预期
修正后的实现
方法1:直观的过滤逻辑
直接在filter中统计每个元素在数组中的出现次数,仅保留次数为1的元素:
const arr = [100, 123, 100, 122, 119, 203, 123, 76, 89] const removeDuplicates = (data) => { return data.filter(val => data.filter(v => v === val).length === 1); } console.log(removeDuplicates(arr)) // 输出: [122, 119, 203, 76, 89]
这种方法逻辑简单易懂,但对于大数组效率较低,因为每次内层filter都会遍历整个数组。
方法2:高效的统计过滤
先用Map统计每个元素的出现次数,再遍历数组过滤出次数为1的元素,仅需两次遍历,性能更优:
const arr = [100, 123, 100, 122, 119, 203, 123, 76, 89] const removeDuplicates = (data) => { const countMap = new Map(); // 统计每个元素的出现次数 data.forEach(val => { countMap.set(val, (countMap.get(val) || 0) + 1); }); // 过滤出仅出现一次的元素 return data.filter(val => countMap.get(val) === 1); } console.log(removeDuplicates(arr)) // 输出: [122, 119, 203, 76, 89]
内容的提问来源于stack exchange,提问作者Manish
相关产品推荐
相关产品推荐

