zoukankan      html  css  js  c++  java
  • js数组去重的方法

    ES6 Set去重

         function unRepeat(arr){
             return Array.from(new Set(arr))
         }
         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(unRepeat(arr))
          //[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {}, {}] //这种方法无法去掉“{}”空对象

    Array.from 将类似数组的对象转为真正的数组
    Set 本身是一个构造函数,用来生成 Set 数据结构,它类似于数组,成员的值都是唯一的,没有重复的值。

    更简便的写法:

               [...new Set(arr)] //使用扩展运算符

    双重for循环,然后splice去重

        function unRepeat(arr){
            for(var i=0;i<arr.length;i++){
               for(var j=i+1;j<arr.length;j++){
                  if(arr[i]==arr[j]){
                     arr.splice(j,1);
                     j--;
                   }
                 }
             }
          return arr;
         }
            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(unRepeat(arr))
           //[1, "true", 15, false, undefined, NaN, NaN, "NaN", "a", {…}, {…}]     //NaN和{}没有去重,两个null直接消失了

     indexOf去重

    function unRepeat(arr){
    if(!Array.isArray(arr)){
      return
    }
    var newArr=[];
    for(var i=0;i<arr.length;i++){
           if(newArr.indexOf(arr[i])===-1){
               newArr.push(arr[i])
           }
       }
       return newArr
    }
    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(unRepeat(arr))
       // [1, "true", true, 15, false, undefined, null, NaN, NaN, "NaN", 0, "a", {…}, {…}]  //NaN、{}没有去重

    新建一个空的结果数组,for 循环原数组,判断结果数组是否存在当前元素,如果有相同的值则跳过,不相同则push进数组。

    利用sort()

    function unRepeat(arr){
       if(!Array.isArray(arr)){
           return
       }
       arr.sort()
       var newArr=[arr[0]];
       for(var i=1;i<arr.length;i++){
           if(arr[i]!==arr[i-1]){
               newArr.push(arr[i])
           }
       }
       return newArr;
    }
    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(unRepeat(arr))
    // [0, 1, 15, "NaN", NaN, NaN, {…}, {…}, "a", false, null, true, "true", undefined]      //NaN、{}没有去重

    利用sort()排序方法,然后根据排序后的结果进行遍历及相邻元素比对。

    利用对象的属性不能相同的特点进行去重

    function unRepeat(arr){
       if(!Array.isArray(arr)){
           return
       }
      var newArr=[];
      var obj={};
      for(var i=0;i<arr.length;i++){
          if(!obj[arr[i]]){
              newArr.push(arr[i]);
              obj[arr[i]]=1;
            }else{
                obj[arr[i]]++
            }
        }
        return newArr
    }
    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(unRepeat(arr))
    //[1, "true", 15, false, undefined, null, NaN, 0, "a", {…}]    //两个true直接去掉了,NaN和{}去重

    利用includes()

    function unRepeat(arr){
        if(!Array.isArray(arr)){
            return
        }
        var newArr=[];
        for(var i=0;i<arr.length;i++){
            if(!newArr.includes(arr[i])){
                newArr.push(arr[i]);
            }
        }
        return newArr;
    }
    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(unRepeat(arr))
        //[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {…}, {…}]     //{}没有去重

    利用filter()

    1 function unRepeat(arr){
    2    return arr.filter((item,index,arr)=>{
    3        //当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素
    4        return arr.indexOf(item,0)===index
    5    })
    6 }
    7 var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
    8         console.log(unRepeat(arr))
    9 //[1, "true", true, 15, false, undefined, null, "NaN", 0, "a", {…}, {…}]
  • 相关阅读:
    Redis源码分析(二十一)--- anet网络通信的封装
    leetcode 总结part1
    leetcode String to Integer (atoi)
    leetcode 165. Compare Version Numbers
    leetcode 189. Rotate Array
    leetcode 168. Excel Sheet Column Title
    leetcode 155. Min Stack
    leetcode 228. Summary Ranges
    leetcode 204. Count Primes
    leetcode 6. ZigZag Conversion
  • 原文地址:https://www.cnblogs.com/isommer/p/12734906.html
Copyright © 2011-2022 走看看