数组去重的几种方法

数组去重的方法

方法一   利用set对象

function unique(arr){
    let arr1=Array.from(new Set(arr))
    return arr1;
}
let arr=[1,2,3,1,2,2,'a','b','c','c','a',4 ,4,false,false, undefined,undefined, null,null, NaN, NaN,]
console.log(unique(arr))  // [1, 2, 3, "a", "b", "c", 4, false, undefined, null, NaN]

    想要更加了解set对象,请阅读 https://www.cnblogs.com/Jeanchjy/p/13086950.html

方法二  利用includes去重,includes方法是检查数组是否有某个值存在

function unique(arr){
        let arr2=[]
        for(let i=0;i<arr.length;i++){
            if(!arr2.includes(arr[i])){
                arr2.push(arr[i])
            }
        }
         return arr2;
     }
     let arr=[1,2,3,1,2,2,'a','b','c','c','a',4 ,4,false,false, undefined,undefined, null,null, NaN, NaN,]
     console.log(unique(arr))  // [1, 2, 3, "a", "b", "c", 4, false, undefined, null, NaN]

方法三  利用indexOf与lastIndexOf查询,在利用splice去重

   function unique(arr){
        for(let i=0;i<arr.length;i++){
            let first=arr.indexOf(arr[i]) //从左往右查询
            let last=arr.lastIndexOf(arr[i]) //从右往左查询
            if(first!==last){
                arr.splice(last,1)
            }
         }
         return arr
    }
    let arr=[1,2,3,1,2,2,'a','b','c','c','a',4 ,4,false,false, undefined,undefined, null,null, NaN, NaN,]
    console.log(unique(arr))  //[1, 2, 3, "a", "b", "c", 4, false, undefined, null, NaN]

方法四  利用indexOf

function unique(arr){
        let arr3=[]
        for(let i=0;i<arr.length;i++){
            if(arr3.indexOf(arr[i])===-1){
                arr3.push(arr[i])
            }
        }
        return arr3
    }
    
    let arr=[1,2,3,1,2,2,'a','b','c','c','a',4 ,4,false,false, undefined,undefined, null,null, NaN, NaN,]
    console.log(arr.indexOf(NaN)) //-1  
    console.log(unique(arr)) // [1, 2, 3, "a", "b", "c", 4, false, undefined, null, NaN, NaN]

       NaN没法去重,由于arr.indexOf(NaN)的索引值为-1,题目中表示不存在的意思。我们是新数组arr3是利用indexOf为-1去判断值存不存在,不存在就插入arr3数组

方法五  利用filter

    let arr=[1,2,3,1,2,2,'a','b','c','c','a',4 ,4,false,false, undefined,undefined, null,null, NaN, NaN,]
    let arr5=arr.filter((item,index,array)=>{
        return array.indexOf(item)===index
    })
    //  会把所有的NaN去掉, 因为查询NaN的索引为-1
    console.log(arr5) //[1, 2, 3, "a", "b", "c", 4, false, undefined, null]

方法六  利用for嵌套循环,在用splice去重

   function unique(arr){
        for(let i=0;i<arr.length;i++){
            for(let j=i+1;j<arr.length;j++){
                if(arr[i]===arr[j]){
                    arr.splice(j,1);
                    j--;
                }
            }
        }
        return arr
    }    
    console.log(NaN===NaN) //false
    let arr=[1,2,3,1,2,2,'a','b','c','c','a',4 ,4,false,false, undefined,undefined, null,null, NaN, NaN,]
    console.log(unique(arr)) //[1, 2, 3, "a", "b", "c", 4, false, undefined, null, NaN, NaN]
    </script> 

 

posted @ 2020-06-14 16:23  JeanJY  阅读(267)  评论(0编辑  收藏  举报