欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JS数组去重的方法

程序员文章站 2022-03-20 15:37:21
在实际工作或面试中,我们经常会遇到“数组去重”问题,接下来就是使用js实现的数组去重的多种方法: 1.将数组的每一个元素依次与其他元素做比较,发现重复元素,删除 var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5,5]; console.log(arr); // ......

这里列举一下数组去重的方法
这里我们先随机生成一个10000项的数组,通过不同方法的对数组进行去重,来比较一下速度。

首先生成数组

function product(){
        var arr=[]
          for(var i=0;i<10000;i++){
            var a=randomNum()
              arr.push(a)
          }
          return arr
      }
 function randomNum(){
        return Math.ceil((Math.random()*10000))
 }
 var arr=product()
 console.log(arr)

1.首先是通过双循坏的方法
  声明一个新的空数组,每次对新数组进行检索,如果查不到,则将元素插入。时间复杂度为O(n2)
贴上代码

function isRepeat2(arr){
  var newArr=[];
    for(var i=0;i<arr.length;i++){
          if(newArr.indexOf(arr[i])==-1){//没查到
              newArr.push(arr[i])
          }
    }
    return newArr
}

2.这种思路是先对数组进行排序,然后比较相邻的元素,如果重复就删除。时间复杂度也为O(n2)

由于JS对sort排序进行了优化,会比第一种方法速度要快一些
代码:

function isRepeat(arr){
  arr=arr.sort((a,b)=>{
      return a-b
  })
    for(var i=0;i<arr.length-1;i++){
      if(arr[i]==arr[i+1]){
          arr.splice(i,1)
          i--
      }
    }
    return arr
}

3. 利用hash对象进行排序

function set(arr) {

var hash = {}

var arr1 = []

for (var i of arr) {

if (!hash[i]) {

arr1.push(i)

hash[i] = 1

}

}

return arr1

}

利用hash对象的key值不重复,来判断是否插入新的元素,由于只进行了一次遍历 时间明显缩短。时间复杂度为O(n)
4.利用ES6的Set对象
Set对象的类似于数组,其值不能重复

function isRepeat3(arr){  const s = new Set();  arr.forEach(x => s.add(x));  return arr}

这种跟第3种速度差不多
下面贴一下四种方式的运行时间比较

console.time()
console.log(isRepeat(arr))
console.timeEnd()
console.time()
console.log(isRepeat2(arr))
console.timeEnd()
console.time()
console.log(isRepeat3(arr))
console.timeEnd()
console.time()
console.log(set(arr))
console.timeEnd()

 

JS数组去重的方法

 

可以看到,4种去重方式的运行速度,明显3,4速度要快一些

本文地址:https://blog.csdn.net/z591102/article/details/112507135