首页 > 代码库 > javaScript 去除数组中的重复值

javaScript 去除数组中的重复值

javaScript 去除数组中的重复值

//js 数组去除重复的方法:ps:forEach是ECMA5中Array新方法中最基本的一个,就是遍历

Array.prototype.unique=function (){
      var result=[];
      this.forEach(function (val){
            if (result.indexOf(val)<0){
                  result.push(val);
            }
      })
      return result;
}

//利用hash表去除重负的方法;这是一种利用空间换区时间的方法;
Array.prototype.uniqueFn=function (){
      var result=[];
      var hash={};
      this.forEach(function (val){
            if (!hash[val]){
                  hash[v]=true;  //下次再遇到这个值,也无法进入循环体;
                  result.push(v);
            }
      })
      result;
}

//因为JavaScript 是弱类型的脚本语言,所有数组中没有数据类型的判断;
//对于下面的数组可能会有误;
// 1,2,’1’,’2’,3],去重结果为[1,2,3],原因在于对象对属性索引时会进行强制类型转换,arr[‘1’]和arr[1]得到的都是arr[1]的值,因此需做一些改变
// arr[x] 会自动的将我们的x转成字符串类型的呀;
Array.prototype.unique=function (){
      var result=[];
      var hash={};
      this.forEach(function (val){
            var type=typeof(val);
            hash[val] || (hash[val]=new Array());
            if(hash[val].indexOf(type)<0){ //对应的可以下是否又该类型的值;
                  hash[val].push(type); //存值对应的数据类型;
                  result.push(val); //存值
            }
      })
}

 还有一种方法,有点绕;不过还挺不错滴呀;

先排序后去重

Array.prototype.unique=function(){
      var result=[this[0]]; //取出头一个数据;
      this.sort();  //排序后,有重复的数据会拍再一起
      this.forEach(function (val){
            val!=result[result.length-1] && result.push(val);
      })
}

 

javaScript 去除数组中的重复值