数组去重的方法

技术博客 (94) 2023-12-30 09:01:01

已知数组arr=[3, 3, 5, 5, 7, 1, 8, 8],去掉数组中重复的数,得到newArr=[3, 5, 7, 1, 8]

方法一:indexOf

var arr = [3, 3, 5, 5, 7, 1, 8, 8];
function removeRepeat(){ 
       var newArr = [];    //定义一个临时数组 
       for(var i = 0; i < arr.length; i++){    //循环遍历当前数组 
           //判断当前数组下标为i的元素是否已经保存到临时数组 
           //如果已保存,则跳过,否则将此元素保存到临时数组中 
           if(newArr.indexOf(arr[i]) === -1){ 
               newArr.push(arr[i]); 
           } 
       } 
       return newArr; 
   }

方法二:hash表(哈希表,根据key value直接访问的数据结构)

var arr = [3, 3, 5, 5, 7, 1, 8, 8];
function removeRepeat(){  
      var h={};       //定义一个hash表 
      var newArr=[];  //定义一个临时数组  
      for(var i = 0; i < arr.length; i++){    //循环遍历当前数组  
            //对元素进行判断,看是否已经存在hash表中,若存在则跳过,否则存入临时数组  
            if(!h[arr[i]]){  
                //存入hash表  
                h[arr[i]] = true;  
                //把当前数组元素存入到临时数组中  
                newArr.push(arr[i]);  
            }  
       }  
       return newArr;  
   }

方法三:排序,比较相邻两个

var arr = [3, 3, 5, 5, 7, 1, 8, 8];
function removeRepeat(){ 
      //将数组进行排序  
      this.sort();  
      //定义结果数组  
      var newArr=[];  
      for(var i = 1; i < arr.length; i++){    //从数组第二项开始循环遍历数组  
           //判断相邻两个元素是否相等,如果相等说明数据重复,否则将元素写入结果数组  
           if(arr[i] !== newArr[newArr.length - 1]){  
               newArr.push(this[i]);  
           }              
      }  
      return newArr;  
              
  } 

方法四:Set对象,[...]解构

var arr = [3, 3, 5, 5, 7, 1, 8, 8];
var mySet = new Set(arr);
var newArr = [...mySet];

方法五:Array.from()方法对一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例。


var arr = [3, 3, 5, 5, 7, 1, 8, 8];
var mySet = new Set(arr);
var newArr = Array.from(mySet);

THE END

发表回复