乐趣区

关于前端:数组去重

数组去重的五种办法
1. 第一种形式就是最简略的 set 去重(o(n))

var arr = [1,2,2,4,3,4,1,3,2,7,5,6,1]
var newArr = new Set(arr)

2. 第二种形式就是用 indexOf 来去重 (o(n^3)) 判断新数组中某个数字是否存在

function fn(arr){let newArr = []
   arr.forEach((val)=>{if(newArr.indexOf(val) == -1){newArr.push(val)
          }
    })    
   return newArr  
}    

// 利用过滤器去重

function fn(arr) {return arr.filter((item, index, arr) => arr.indexOf(item) === index)
}

3. 第三种形式一般去重(o(n^3))

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)
         }
    }
}    

4. 键值去重 (o(n^3)) 依据键值是惟一的来去重

    function fn(arr){let arr1 = [],         
        arr2 = []     
        arr.forEach((val)=>{arr1[val]=val     
    })     
    //arr1 数组会存在空的状况     
    // 所以返回 arr2     
        arr1.forEach((val)=>{if(!!val){arr2.push(val)        
        }     })     
        return arr2
}

5.sort 排序后去重(o(n^2))只比 set 复杂度低

function fn(arr){let newArr = []
   arr.sort((a,b)=>{return a-b})
   arr.forEach((val,index)=>{if(val != arr[index+1]){newArr.push(val)
       }
   })
   return newArr
}

退出移动版