总结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 相关文章推荐
JavaScript 异步方法队列链实现代码分析
Jun 05 Javascript
BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法
Jun 07 Javascript
基于JS代码实现图片在页面中旋转效果
Jun 16 Javascript
基于jquery实现二级联动效果
Mar 30 jQuery
Angular2学习教程之ng中变更检测问题详解
May 28 Javascript
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
Feb 26 Javascript
p5.js 毕达哥拉斯树的实现代码
Mar 23 Javascript
详解webpack打包第三方类库的正确姿势
Oct 20 Javascript
mpvue 单文件页面配置详解
Dec 02 Javascript
亲自动手实现vue日历控件
Jun 26 Javascript
electron踩坑之dialog中的callback解决
Oct 06 Javascript
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
Dec 01 Vue.js
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访问查询mysql数据的三种方法
2006/10/09 PHP
PHP定时更新程序设计思路分享
2014/06/10 PHP
php实现的IMEI限制的短信验证码发送类
2015/05/05 PHP
php实现zip文件解压操作
2015/11/03 PHP
PHP 500报错的快速解决方法
2016/12/14 PHP
JavaScript的Function详细
2006/11/14 Javascript
学习ExtJS border布局
2009/10/08 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
jQuery实现简单的点赞效果
2020/05/29 Javascript
JavaScript交换两个变量值的七种解决方案
2016/12/01 Javascript
微信小程序实战之轮播图(3)
2017/04/17 Javascript
JavaScript实现body内任意节点的自定义属性功能示例
2017/09/18 Javascript
JS返回顶部实例代码
2020/08/09 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
2018/03/28 jQuery
微信小程序中this.data与this.setData的区别详解
2018/09/17 Javascript
微信小程序动画组件使用解析,类似vue,且更强大
2019/08/01 Javascript
JavaScript实现简单验证码
2020/08/24 Javascript
[52:20]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
python实现自动登录人人网并访问最近来访者实例
2014/09/26 Python
解读Django框架中的低层次缓存API
2015/07/24 Python
Python利用matplotlib生成图片背景及图例透明的效果
2017/04/27 Python
Anaconda2 5.2.0安装使用图文教程
2018/09/19 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
2019/07/15 Python
Python TCPServer 多线程多客户端通信的实现
2019/12/31 Python
利用 Python ElementTree 生成 xml的实例
2020/03/06 Python
调整Jupyter notebook的启动目录操作
2020/04/10 Python
详解h5页面在不同ios设备上的问题总结
2019/03/01 HTML / CSS
创业大赛策划书
2014/03/01 职场文书
计算机专业毕业生自荐信范文
2014/03/06 职场文书
奥巴马的演讲稿
2014/05/15 职场文书
煤矿安全协议书
2014/08/20 职场文书
四风个人对照检查材料思想汇报(办公室通用版)
2014/10/07 职场文书
四风查摆问题自查报告
2014/10/10 职场文书
六年级学生评语大全
2014/12/26 职场文书
详解如何在Canvas中添加事件的方法
2021/04/17 Javascript
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python