总结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 URL参数判断,确定菜单样式
May 31 Javascript
jQuery动态添加的元素绑定事件处理函数代码
Aug 02 Javascript
jquery中的mouseleave和mouseout的区别 模仿下拉框效果
Feb 07 Javascript
jQuery回车实现登录简单实现
Aug 20 Javascript
使用coffeescript编写node.js项目的方法汇总
Aug 05 Javascript
js实现匹配时换色的输入提示特效代码
Aug 17 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
Dec 07 Javascript
jquery代码规范让代码越来越好看
Feb 03 Javascript
Vue Spa切换页面时更改标题的实例代码
Jul 15 Javascript
Angular2使用SVG自定义图表(条形图、折线图)组件示例
May 10 Javascript
layer.js open 隐藏滚动条的例子
Sep 05 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
Jul 15 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脚本的10个技巧(3)
2006/10/09 PHP
使用PHP实现Mysql读写分离
2013/06/28 PHP
浅析php中三个等号(===)和两个等号(==)的区别
2013/08/06 PHP
PHP设计模式之工厂模式实例总结
2017/09/01 PHP
document.compatMode介绍
2009/05/21 Javascript
再谈javascript面向对象编程
2012/03/18 Javascript
setTimeout的延时为0时多个浏览器的区别
2012/05/23 Javascript
Js-$.extend扩展方法使方法参数更灵活
2013/01/15 Javascript
javascript省市级联功能实现方法实例详解
2015/10/20 Javascript
js判断文本框输入的内容是否为数字
2015/12/23 Javascript
如何获取元素的最终background-color
2017/02/06 Javascript
Express系列之multer上传的使用
2017/10/27 Javascript
jQuery实现动态控制页面元素的方法分析
2017/12/20 jQuery
vue 双向数据绑定的实现学习之监听器的实现方法
2018/11/30 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
微信小程序收藏功能的实现代码
2020/06/19 Javascript
[01:10:02]IG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[00:35]可解锁地面特效
2018/12/20 DOTA
教你安装python Django(图文)
2013/11/04 Python
Python实现基于HTTP文件传输实例
2014/11/08 Python
python简单实现基数排序算法
2015/05/16 Python
python实现数组插入新元素的方法
2015/05/22 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
2019/05/13 Python
Python自定义函数计算给定日期是该年第几天的方法示例
2019/05/30 Python
春节到了 教你使用python来抢票回家
2020/01/06 Python
Boutique 1美国:阿联酋奢侈时尚零售商
2017/10/16 全球购物
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
管理部副部长岗位职责范文
2014/03/09 职场文书
大学生违纪检讨书300字
2014/10/25 职场文书
宾馆前台接待岗位职责
2015/04/02 职场文书
2015年学校信息技术工作总结
2015/05/25 职场文书
2016年11月份红领巾广播稿
2015/12/21 职场文书
2016特色励志班级口号
2015/12/24 职场文书
iPhone13 Pro外观确定,升级4800万镜头,4月20日发新品
2021/04/15 数码科技
「我的青春恋爱物语果然有问题。-妄言录-」第20卷封面公开
2022/03/21 日漫
微信小程序APP的生命周期及页面的生命周期
2022/04/19 Javascript