总结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 图像裁剪插件Jcrop的简单使用
May 22 Javascript
JQuery最佳实践之精妙的自定义事件
Aug 11 Javascript
javascript获得网页窗口实际大小的示例代码
Sep 21 Javascript
JavaScript中的函数(二)
Dec 23 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
Apr 04 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
Nov 07 Javascript
全面解析node 表单的图片上传
Nov 21 Javascript
Vue编写多地区选择组件
Aug 21 Javascript
vue 页面加载进度条组件实例
Feb 05 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
Sep 05 Javascript
微信小程序的线程架构【推荐】
May 14 Javascript
最新最全的手机号验证正则表达式
Feb 24 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单例模式示例分享
2015/02/12 PHP
你应该知道PHP浮点数知识
2015/05/13 PHP
window.open被浏览器拦截后的自定义提示效果代码
2007/11/19 Javascript
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
2009/12/04 Javascript
复制小说文本时出现的随机乱码的去除方法
2010/09/07 Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
javascript中encodeURI和decodeURI方法使用介绍
2013/05/06 Javascript
使用js的replace()方法查找字符示例代码
2013/10/28 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
AngularJS 实现弹性盒子布局的方法
2016/08/30 Javascript
关于微信上网页图片点击全屏放大效果
2016/12/19 Javascript
JavaScript轮播图简单制作方法
2017/02/20 Javascript
Bootstrap缩略图的创建方法
2017/03/22 Javascript
nodejs接入阿里大鱼短信验证码的方法
2017/07/10 NodeJs
使用jQuery实现页面定时弹出广告效果
2017/08/24 jQuery
深入理解JS的事件绑定、事件流模型
2018/05/13 Javascript
Vue配合iView实现省市二级联动的示例代码
2018/07/27 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
2019/04/10 Javascript
vue 动态组件用法示例小结
2020/03/06 Javascript
JavaScript实现多层颜色选项卡嵌套
2020/09/21 Javascript
[51:44]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第二场
2018/04/04 DOTA
使用python实现ANN
2017/12/20 Python
pytorch 把MNIST数据集转换成图片和txt的方法
2018/05/20 Python
Pycharm使用远程linux服务器conda/python环境在本地运行的方法(图解))
2019/12/09 Python
Python文件操作方法详解
2020/02/09 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
2020/05/23 Python
精选鞋类、服装和配饰的全球领先目的地:Bodega
2021/02/27 全球购物
县委务虚会发言材料
2014/10/20 职场文书
地方白酒代理协议书
2014/10/25 职场文书
医院志愿者活动总结
2015/05/06 职场文书
大学生违纪检讨书范文
2015/05/07 职场文书
导游词之镇江西津古渡
2019/11/06 职场文书
导游词之唐山景点
2019/12/18 职场文书
攻击最高的10只幽灵系神奇宝贝,坚盾剑怪排第一,第五最为可怕
2022/03/18 日漫