面试官提问js篇2:数组去重有什么方法

1.利用set去重(这种方法无法去掉“{}”空对象,)

 <script>
        var arry = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
        // var set=[...new Set(arry)];
        // Array.form会将set对象转化成数组
        arry1=Array.from(new Set(arry))
        console.log(arry1);// [1, 'true', true, 15, false, undefined, null, NaN, 'NaN', 0, 'a', {…}, {…}]

2. for循环嵌套,splice去重(NaN和{}没有去重,两个null直接消失了)

<script>
    var arry=[1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
    // [1, 'true', 15, false, undefined, NaN, NaN, 'NaN', 'a', {…}, {…}]
    for(var i=0;i<arry.length;i++){
        for(var j=i+1;j<arry.length;j++){
            if(arry[i]==arry[j]){
                arry.splice(j,1);
                j--;
                // break
            }
        }   
    }
    console.log(arry);

3. 利用indexof去重()

<script>
          var arry = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
          var arr = []
          if (!Array.isArray(arry)) {
              console.log("数据类型错误")
          } else {
              for (var i = 0; i < arr.length; i++) {
                  if (arry.indexOf(arr[i]) == -1) {
                      arr.push(arry[i])
                  }
              }
          }
     console.log(arr);
  </script>

4. 利用includes()去重

  <script>
        var arry = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
        if(!Array.isArray(arry)) console.log('type error')
        var arry1=[]
        for(var i=0;i<arry.length;i++){
            if(!arry1.includes(arry[i])){
                arry1.push(arry[i])
            }
        }
        console.log(arry1);
    </script>

5. 利用递归去重

    <script>
        var arry = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
        var arry1 = JSON.parse(JSON.stringify(arry))
        console.log(arry1);
        arry1.sort()
        function unique(index) {
            if (index >= 1) {
                if (arry1[index] === arry1[index - 1]) {
                    arry1.splice(index,1)
                }
            unique(index-1)
            }
            return arry1
        }
       console.log(unique(arry1.length-1));

    </script>   

6. 利用sort方法

<script>
        var arry = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
        if (!Array.isArray(arry)) {
            console.log('type error');
        }
        arry = arry.sort()
        var arry1 = [arry[0]]
        for (var i = 1; i < arry.length-1; i++) {
            if (arry[i] !== arry[i -1]) {
                arry1.push(arry[i])
            }
        }
        console.log(arry1);//NaN、{}没有去重
        // [0, 1, 15, NaN, NaN, 'NaN', {…}, {…}, 'a', false, null, 'true', true, undefined]
    </script>

7. hasOwnProperty去重

 <script>
        var arry = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
        var obj = {}
        arry1=arry.filter(function (item, index, array) {
            return obj.hasOwnProperty(typeof item + item)?false:(obj[typeof item+item]=true)
        })
        console.log(arry1);//全部去重
        // [1, 'true', true, 15, false, undefined, null, NaN, 'NaN', 0, 'a', {…}]
    </script>

8. 利用filter去重

 <script>
        var arry = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
        arry1=arry.filter(function(item,index,arry){
            return arry.indexOf(item,0)===index
        })
        console.log(arry1);//{}没有去重
        // [1, 'true', true, 15, false, undefined, null, 'NaN', 0, 'a', {…}, {…}]
    </script>

9. 利用map去重

  <script>
        var arry = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
        var map=new Map()
        var arry1=[]
        for(var i=0;i<arry.length;i++){
            if(map.has(arry[i])){
                map.set(arry[i],true)
            }else{
                map.set(arry[i],false)
                arry1.push(arry[i])
            }
        }
        console.log(arry1);//{}没有去重
        // [1, 'true', true, 15, false, undefined, null, NaN, 'NaN', 0, 'a', {…}, {…}]
    </script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

咖啡壶子

你的鼓励奖是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值