JS数组去重的8种代码实现

改变原数组

function deduplicationArray(arr) {
    let arrSet = new Set();
    let i = 0;
    while (i < arr.length) {
        if (arrSet.has(arr[i])) {
            arr.splice(i, 1);
            continue;
        }
        arrSet.add(arr[i]);
        i++;
    }
}

不改变原数组,返回新的数组

  1. Array.from + Set:

    function deduplicationArray(arr) {
        return Array.from(new Set(arr));
    }
    
  2. ... + Set:

    function deduplicationArray(arr) {
        return [...new Set(arr)];
    }
    
  3. forEach + every

    function deduplicationArray(arr) {
        let target = [];
        arr.forEach(item => {
            target.every(x => x !== item) && target.push(item);
        });
        return target;
    }
    
  4. forEach + includes:

    function deduplicationArray(arr) {
        let target = [];
        arr.forEach(item => {
            !target.includes(item) && target.push(item);
        });
        return target;
    }
    
  5. filter + indexOf:

    function deduplicationArray(arr) {
        return arr.filter((v, i, a) => a.indexOf(v) == i);
    }
    
  6. filter + slice + includes:

    和第5条使用indexOf基本相同,减少了与后面元素的判断

    function deduplicationArray(arr) {
        return arr.filter((v, i, a) => !a.slice(0, i).includes(v));
    }
    
  7. reduce + includes:

    function deduplicationArray(arr) {
        return arr.reduce((targetArr, v) => {
            !targetArr.includes(v) && targetArr.push(v);
            return targetArr;
        }, []);
    }
    

总的来说就是遍历数组,至少一次

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尖尖角的搬砖日常

感谢自己又学到了一点

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值