总结Javascript中数组各种去重的方法

 更新时间:2016年10月04日 18:40:12   投稿:daisy  
相信大家都知道网上关于Javascript中数组去重的方法很多,这篇文章给大家总结Javascript中数组各种去重的方法,相信本文对大家学习和使用Javascript具有一定的参考借鉴价值,有需要的下面来一起看看。

前言

在做javascript开发的时候,经常会遇到数组元素重复的问题,而javascript Array又没有直接提供方法解决此问题,还需要自己去实现。这篇文章总结了Javascript中数组各种去重的方法,下面来一起看看。

方法一 利用对象属性不重复的特性

Array.prototype.distinct = function (){
  var arr = this,
    i,
    obj = {},
    result = [],
    len = arr.length;
  for(i = 0; i< arr.length; i++){
    if(!obj[arr[i]]){  //如果能查找到,证明数组元素重复了
      obj[arr[i]] = 1;
      result.push(arr[i]);
    }
  }
  return result;
};

方法二 双层循环,外层循环元素,内层循环时比较值

Array.prototype.distinct = function(){
  var arr = this,
    result = [],
    i,
    j,
    len = arr.length;
  for(i = 0; i < len; i++){
    for(j = i + 1; j < len; j++){
      if(arr[i] === arr[j]){
        j = ++i;
      }
    }
    result.push(arr[i]);
  }
  return result;
}

方法三 数组递归去重

Array.prototype.distinct = function (){
  var arr = this,
    len = arr.length;
  arr.sort(function(a,b){    //对数组进行排序才能方便比较
    return a - b;
  })
  function loop(index){
    if(index >= 1){
      if(arr[index] === arr[index-1]){
        arr.splice(index,1);
      }
      loop(index - 1);  //递归loop函数进行去重
    }
  }
  loop(len-1);
  return arr;
};

方法四 利用indexOf以及forEach

Array.prototype.distinct = function (){
  var arr = this,
    result = [],
    len = arr.length;
  arr.forEach(function(v, i ,arr){    //这里利用map,filter方法也可以实现
    var bool = arr.indexOf(v,i+1);    //从传入参数的下一个索引值开始寻找是否存在重复
    if(bool === -1){
      result.push(v);
    }
  })
  return result;
};

方法五 利用ES6的set

function dedupe(array){
  return Array.from(new Set(array));
}
dedupe([1,1,2,3]) //[1,2,3]

方法六 拓展运算符(…)内部使用for…of循环

let arr = [3,5,2,2,5,5];
let unique = [...new Set(arr)];  //[3,5,2]

总结

好了,以上就是这篇文章的全部内容了,个人比较喜欢使用方法一,不会对原数组进行修改,希望这篇文章对大家能有所帮助,如果有疑问大家可以留言交流。

相关文章

  • js实现首屏延迟加载实现方法 js实现多屏单张图片延迟加载效果

    js实现首屏延迟加载实现方法 js实现多屏单张图片延迟加载效果

    这篇文章主要介绍了js实现首屏延迟加载实现方法,以及js实现多屏单张图片延迟加载效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 使用OPENLAYERS3实现点选的方法

    使用OPENLAYERS3实现点选的方法

    这篇文章主要为大家详细介绍了使用OPENLAYERS3实现点选的几种方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • js 学习笔记(三)

    js 学习笔记(三)

    JavaScript的对象基础 本篇主要讲解本地对象Array的各种方法。
    2009-12-12
  • 15个非常实用的JavaScript代码片段

    15个非常实用的JavaScript代码片段

    这篇文章主要为大家详细介绍了15个非常实用的JavaScript代码片段,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • JavaScript空数组的every()方法实践

    JavaScript空数组的every()方法实践

    every()方法用于检测数组中的所有元素是否都满足指定条件, 本文主要介绍了JavaScript空数组的every()方法实践,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • JS温故而知新之变量提升和时间死区

    JS温故而知新之变量提升和时间死区

    这篇文章主要给大家介绍了关于JS温故而知新之变量提升和时间死区的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • 你不知道的高性能JAVASCRIPT

    你不知道的高性能JAVASCRIPT

    想必大家都知道,JavaScrip是全栈开发语言,浏览器,手机,服务器端都可以看到JS的身影。 本文会分享一些高效的JavaScript的最佳实践,提高大家对JS的底层和实现原理的理解,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • javascript 动态改变层的Z-INDEX的代码style.zIndex

    javascript 动态改变层的Z-INDEX的代码style.zIndex

    javascript 动态改变层的Z-INDEX的代码style.zIndex...
    2007-08-08
  • js中javascript:void(0) 真正含义

    js中javascript:void(0) 真正含义

    在javascript中javascript:void(0)经常会用到,大家知道此含有吗,在Javascript中void是一个操作符,该操作符指定要计算一个表达式但是不返回值,本文给大家介绍js中javascript:void(0) 真正含义,需要的朋友可以参考下
    2015-08-08
  • High Performance JavaScript(高性能JavaScript)读书笔记分析

    High Performance JavaScript(高性能JavaScript)读书笔记分析

    High Performance JavaScript(高性能JavaScript)读书笔记,让你的js代码更有效率。
    2011-05-05

最新评论