总结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 相关文章推荐
图像替换新技术 状态域方法
Jan 28 Javascript
jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)
Oct 20 Javascript
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
Jun 27 Javascript
JQuery Tips相关(1)----关于$.Ready()
Aug 14 Javascript
JavaScript实现表格点击排序的方法
May 11 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
Aug 06 Javascript
写给小白的JavaScript引擎指南
Dec 04 Javascript
js获取鼠标位置实例详解
Dec 09 Javascript
AngularJS入门教程之过滤器用法示例
Nov 02 Javascript
详解React 在服务端渲染的实现
Nov 16 Javascript
利用jquery和BootStrap实现动态滚动条效果
Dec 03 jQuery
vue使用prop可以渲染但是打印台报错的解决方式
Nov 13 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
espresso double下 咖啡粉超细时 饼压力对咖啡的影响
2021/03/03 冲泡冲煮
codeigniter教程之多文件上传使用示例
2014/02/11 PHP
降低PHP Redis内存占用
2017/03/23 PHP
php慢查询日志和错误日志使用详解
2021/02/27 PHP
YUI 读码日记之 YAHOO.lang.is*
2008/03/22 Javascript
JavaScript:Div层拖动效果实例代码
2013/08/06 Javascript
浅析node.js中close事件
2014/11/26 Javascript
js+HTML5实现视频截图的方法
2015/06/16 Javascript
微信小程序 action-sheet底部菜单详解
2016/10/27 Javascript
微信小程序 loading(加载中提示框)实例
2016/10/28 Javascript
Servlet实现文件上传,可多文件上传示例
2016/12/05 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
2016/12/07 Javascript
详解jQuery简单的表单应用
2016/12/16 Javascript
js评分组件使用详解
2017/06/06 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
基于Bootstrap表单验证功能
2017/11/17 Javascript
Vue.js获取被选择的option的value和text值方法
2018/08/24 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
2019/03/07 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
2019/05/22 Javascript
vue-cli在 history模式下的配置详解
2019/11/26 Javascript
Vue 中如何将函数作为 props 传递给组件的实现代码
2020/05/12 Javascript
分析Python编程时利用wxPython来支持多线程的方法
2015/04/07 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
2017/07/28 Python
Python编写一个验证码图片数据标注GUI程序附源码
2019/12/09 Python
Python中 Global和Nonlocal的用法详解
2020/01/20 Python
工商管理专业实习大学生自我鉴定
2013/09/19 职场文书
人力资源行政经理自我评价
2013/10/23 职场文书
小区门卫管理制度
2014/01/29 职场文书
保安队长职务说明书
2014/02/23 职场文书
基层党组织建设整改方案
2014/09/16 职场文书
代领学位证书毕业证书委托书
2014/09/30 职场文书
2014年家长学校工作总结
2014/11/20 职场文书
中标通知书
2015/04/17 职场文书
golang内置函数len的小技巧
2021/07/25 Golang
HTML5+CSS+JavaScript实现捉虫小游戏设计和实现
2021/10/16 HTML / CSS
python数字图像处理实现图像的形变与缩放
2022/06/28 Python