数组去重(JS实现)

第一种方法
 //双重循环遍历,利用splice()删除数组元素
  var arr = [1,2,3,222,5,5,6,7,3,3,3,31];
  function removeIntarr(arr) {
      for(var i=0;i<arr.length-1;i++){
          for(var j=i+1;j<length;j++){
              if(arr[i] == arr[j]){
                 arr.splice(j,1);
                  j--; 
                  //删除元素后;数组自动补齐但是j++会忽略连续的相同数字,于是数组-1
       }       
     }  
   }   
    return arr;
 }
 console.log(arr);
 var arr2 = removeIntarr(arr);
 console.log(arr2);

第二种方法

//借助indexOf()方法判断此元素在该数组中首次出现的位置下标与循环的下标是否相等
var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
function rep(arr) {
    for(var i=0;i<arr.length;i++){
       if(arr.indexOf(arr[i]) !=i ){
         //找到该元素最开始出现的位置,如果当前下标不等于第一次出现的下标就删除元素
          arr.splice(i,1); //删除数组元素后数组长度减1后面的元素前移
          i--; //数组下标回退     
      }         
    }
    return arr;
} 
console.log(arr);
var a1=rep(arr);   
console.log(a1);

 终极算法:我突然发现上面的算法都好傻,利用hash表的

// Array.prototype 属性表示 Array 构造函数的原型,并允许您向所有Array对象添加新的属性和方法。
Array.prototype.unique = function(){
      let temp = {}, 
      arr = [], 
      len = this.length; 
      for(let i=0;i<len;i++){
        if(!temp[this[i]]){ 
          temp[this[i]]="abc";
          arr.push(this[i]);
        }
      }
      return arr; 
    }
let a = [2,3,4,5,5,6,3,4,5]
console.log(a.unique()) //会输出不重复的
// -------------------------------------------------
function uniqo(s){
    let hash = {}
    let arr = []
    for(let i=0;i<s.length;i++){
        if(!hash[s[i]]){
            hash[s[i]]="abc"
            arr.push(s[i])
        }
    }
    return arr
}
let a = [2,3,4,5,5,6,3,4,5]
console.log(uniqo(a))

 

posted on 2018-12-06 13:38  城外三石  阅读(111)  评论(0)    收藏  举报

导航