You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 22:52:39