面试官问你2:数组去重有什么方法

Posted 咖啡壶子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试官问你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>

以上是关于面试官问你2:数组去重有什么方法的主要内容,如果未能解决你的问题,请参考以下文章

面试官问你多线程你该怎么回答

面试官问你斐波那契数列的时候不要高兴得太早

面试官问你:为什么选择spring作为Java框架,你该怎么回答?

大厂面试官问你知道finalfinallyfinalize有什么区别?

那些年,面试官问你的消息队列

面试官问你为什么离职,HR都认可的离职原因,你学会了吗?