js数组去重(九种方式,还有实现的方法再更新)

一、es6的Set

var arr = [1, 2, 3 ,2,undefined,undefined,true,true,15,15,false,false, null,null]
new Set是伪数组,用Array.from或者...转为数组
console.log([...new Set(arr)])
console.log(Array.from(new Set(arr)))

小哥哥不让我这么简单的实现,好的,我真想给你来一拳。

二、利用for嵌套for,然后splice去重(ES5中最常用)

var arr = [1, 2, 3 ,2,undefined,undefined,true,true,15,15,false,false, null,null]
       for(var i =0;i<arr.length; i++) {
           for(var j=i+1;j<arr.length;j++) {
               if(arr[i] === arr[j]) {
                   arr.splice(i,1)
                   i--
               }
           }
       }
       console.log(arr,"arr")//NaN和{}没有去重,两个null直接消失
       // 这里是用到的splice方法,删除数组中的某一项,但是也要记得删除噢

三、利用sort(),然后判断前后两个值

var a = [1, 2, 3, 2, {}, {}, NaN, NaN, undefined, undefined, true, true, 15, 15, false, false, null, null]
        var arr = a.sort((a, b) => {return a - b;});
        var result = [];
        for (var i = 0; i < arr.length; i++) {
            if (arr[i] !== arr[i + 1]) {
                result.push(arr[i])
            }
        }
        console.log(result, "result") NaN、{}没有去重
       //通过判断前后两个值的  然后再push

四、利用indexOf去重

var arr = [1, 2, 3, 2, undefined, undefined, true, true, 15, 15, false, false, null, null]
        var result = [];
        for (var i = 0; i < arr.length; i++) {
            if (result.indexOf(arr[i]) == -1) {
                result.push(arr[i])
            }
        }
        console.log(result, "result") //NaN、{}没有去重
       //indexOf 去判断 indexOf == -1 才去push  push是从最后一项添加,pop()是删除最后一项

五、利用includes

var a = [1, 2, 3, 2, {}, {}, NaN, NaN, undefined, undefined, true, true, 15, 15, false, false, null, null]
        var arr = a.sort((a, b) => {return a - b;});
        var result = [];
        for (var i = 0; i < arr.length; i++) {
            if(!result.includes(arr[i])) {
                result.push(arr[i])
            }
        }
        console.log(result,)
        //[1, 2, 3, {…}, {…}, NaN, false, null, true, 15, undefined]
        //对象没有去重

六、利用reduce+includes

var arr = [1, 2, 3, 2, {}, {}, NaN, NaN, undefined, undefined, true, true, 15, 15, false, false, null, null]
        var a = arr.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur],[])
        console.log(a, "a")
        //对象没有去重

七、利用Map数据结构去重

var arr = [1, 2, 3, 2, {}, {}, NaN, NaN, undefined, undefined, true, true, 15, 15, false, false, null, null]
        var map = new Map();
        var result = new Array;
        for(var i=0; i<arr.length; i++) {
            if(!map.has(arr[i])) {
                // map.set(arr[i])
                map.set(arr[i])
                result.push(arr[i])
            }
        }
        console.log(result, "result")
        //对象没有去重

八、filter+indexOf

var arr = [1, 2, 3, 2, {}, {}, NaN, NaN, undefined, undefined, true, true, 15, 15, false, false, null, null]
        var result = [];
        arr.filter(item => {
           if(result.indexOf(item) == -1) {
              result.push(item)
           }
        })
        console.log(result, "result")
        //对象没有去重 NaN两个都没有

九、hasOwnProperty

function unique(arr) {
            var obj= {};
            return arr.filter((cur,index,[]) => {
                return obj.hasOwnProperty(typeof cur + cur) ? false : (obj[typeof cur + cur] = true)
            })
        }
        var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
        console.log(unique(arr))
        //[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {…}]   //所有的都去重了

总结

只有hasOwnProperty方法可以实现全部的去重

有的这位大佬的,代码我自己写的,我就不信我不行了。
https://segmentfault.com/a/1190000016418021/

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值