关于js数组去重

发布时间:2019-08-13 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了关于js数组去重脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

不管是面试还是平时写程序的过程中我们经常会遇到要对数组进行去重的问题,该文总结了一些常见的数组去重的方法。

对象键值对法

思路:新建一js对象json以及新数组reArr,@R_126_2523@元素是否为json的键,不是则创建,是则判断元素的类型在键对应的值中是否存在。

    function unique(array){
      VAR json = {}, reArr = [], len = array.length, val, type;
        for (var i = 0; i < len ; i++) {
            val = array[i];
            type = Object.PRototype.toString.call(val);
            if (!json[val]) {//如果键对应的值不存在则是第一次存取
                json[val] = [type];//设置该键为数组,并赋值元素类型
                reArr.push(val);//往reArr中添加元素
            } else if (json[val].indexOf(type) < 0) {
                json[val].push(type);
                reArr.push(val);
            }
        }
        return reArr;
    }
//该方法有bug,当有多个{}时,只能保存一个{} 

测试

关于js数组去重

遍历数组法

思路:新建一新数组,遍历传入的数组,值不在新数组就加入该新数组中;该方法最主要的是要使用ES5中的indexOf方法。但是ie8一下不支持,所以需要做一些兼容

    if (!Array.prototype.indexOf){
      Array.prototype.indexOf = function(item){
        if (this.length == 0){
          return -1;
        }
        for(var i = 0, len = this.length; i < len; i++){
          if (this[i] === item){//注意是三个等号
            return i
            break;
          }  
        }
        return -1;
      }
}

去重代码

function unique(array){
  var reArr = []; 
  for(var i = 0; i < array.length; i++){
    if (reArr.indexOf(array[i]) == -1){//判断元素是否在数组中已经存在
       reArr.push(array[i]);
    } 
  }
  return reArr;
}

测试

关于js数组去重

数组下标判断法

思路:将传入的数组的第一项目添加到一个新的数组,后遍历传入的数组中的元素利用indexOf方法,若返回值与循环中的索引不同则是重复的元素。

    function unique(array){
        var reArr=[];
            reArr[0]=array[0];
        for(var i=1;i<array.length;i++){
            if(array.indexOf(array[i])==i){
                reArr.push(arrar[i]);
            }
        }
        return reArr;
    }

测试

关于js数组去重

排序后相邻去除法

思路:先将数组经过sort排序,这时候相同的元素处于相邻的位置,所以在便利数组的时候我们只将与前一值不重复的值

    function unique(array){
        var reArr=[array[0]];
        var len=array.length;
            array.sort();
        for(var i=1;i<len;i++){
            if(array[i]!=reArr[reArr.length-1]){//注意这里
                reArr.push(array[i]);
            }
        }
        return reArr;
    }

测试

关于js数组去重

es6中Set方式(2017-8-25补充)

这种方式兼容性(但是可以通过babel转)不太好,但是非常简洁。

function uniq (array) {
  return [...new Set(array)]
}

脚本宝典总结

以上是脚本宝典为你收集整理的关于js数组去重全部内容,希望文章能够帮你解决关于js数组去重所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。