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


Posted in Javascript onOctober 04, 2016

前言

在做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]

总结

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

Javascript 相关文章推荐
Jquery操作Select 简单方便 一个js插件搞定
Nov 12 Javascript
克隆javascript对象的三个方法小结
Jan 12 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
Nov 15 Javascript
javascript作用域容易记错的两个地方分析
Jun 22 Javascript
js不能跳转到上一页面的问题解决方法
Mar 01 Javascript
获取元素距离浏览器周边的位置的方法getBoundingClientRect
Apr 17 Javascript
JavaScript极简入门教程(一):基础篇
Oct 25 Javascript
10道典型的JavaScript面试题
Mar 22 Javascript
Vue.JS项目中5个经典Vuex插件
Nov 28 Javascript
vue2实现搜索结果中的搜索关键字高亮的代码
Aug 29 Javascript
vue-router之实现导航切换过渡动画效果
Oct 31 Javascript
JS实现密码框效果
Sep 10 Javascript
Javascript中arguments对象的详解与使用方法
Oct 04 #Javascript
js判断浏览器是否支持严格模式的方法
Oct 04 #Javascript
浅谈jquery高级方法描述与应用
Oct 04 #Javascript
vue.js中$watch的用法示例
Oct 04 #Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
Oct 04 #Javascript
用jquery快速解决IE输入框不能输入的问题
Oct 04 #Javascript
JavaScript九九乘法口诀表的简单实现
Oct 04 #Javascript
You might like
如何在PHP中使用Oracle数据库(1)
2006/10/09 PHP
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
2009/07/01 PHP
sql注入与转义的php函数代码
2013/06/17 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
2016/10/08 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
修改jQuery Validation里默认的验证方法
2012/02/14 Javascript
JavaScript prototype属性深入介绍
2012/11/27 Javascript
javascript中的startWith和endWith的几种实现方法
2013/05/07 Javascript
在百度知道团队中快速审批新成员的js脚本
2014/02/02 Javascript
WEB前端设计师常用工具集锦
2014/12/09 Javascript
jquery实现勾选复选框触发事件给input赋值
2015/02/01 Javascript
jquery+ajax实现注册实时验证实例详解
2015/12/08 Javascript
js格式化时间的方法
2015/12/18 Javascript
原生JS实现拖拽图片效果
2020/08/27 Javascript
JavaScript实现的select点菜功能示例
2017/01/16 Javascript
微信小程序 获取session_key和openid的实例
2017/08/17 Javascript
Vue scoped及deep使用方法解析
2020/08/01 Javascript
JS实现公告上线滚动效果
2021/01/10 Javascript
[01:14:12]2018DOTA2亚洲邀请赛4.7 总决赛 LGD vs Mineski 第二场
2018/04/09 DOTA
Python获取服务器信息的最简单实现方法
2015/03/05 Python
Python 的 Socket 编程
2015/03/24 Python
python链接Oracle数据库的方法
2015/06/28 Python
Python for Informatics 第11章之正则表达式(二)
2016/04/21 Python
实例分析python3实现并发访问水平切分表
2018/09/29 Python
对python 中class与变量的使用方法详解
2019/06/26 Python
深入解析神经网络从原理到实现
2019/07/26 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
2019/11/08 Python
python在地图上画比例的实例详解
2020/11/13 Python
html5 兼容IE6结构的实现代码
2012/05/14 HTML / CSS
德国自然时尚和有机产品购物网站:Waschbär
2019/05/29 全球购物
J2ee常用的设计模式?说明工厂模式
2015/05/21 面试题
研究生自我鉴定范文
2013/10/30 职场文书
基层干部2014全国两会学习心得体会
2014/03/10 职场文书
小学班干部竞选演讲稿
2014/04/24 职场文书
嵌入式Redis服务器在Spring Boot测试中的使用教程
2021/07/21 Redis
JavaScript执行机制详细介绍
2021/12/06 Javascript