总结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 相关文章推荐
高性能web开发 如何加载JS,JS应该放在什么位置?
May 14 Javascript
javascript利用apply和arguments复用方法
Nov 25 Javascript
javascript中验证大写字母、数字和中文
Jan 15 Javascript
javascript随机抽取0-100之间不重复的10个数
Feb 25 Javascript
AngularJS实现数据列表的增加、删除和上移下移等功能实例
Sep 05 Javascript
jquery自定义表单验证插件
Oct 12 Javascript
解析Javascript单例模式概念与实例
Dec 05 Javascript
Bootstrap CSS使用方法
Dec 23 Javascript
关于javascript作用域的常见面试题分享
Jun 18 Javascript
vue的toast弹窗组件实例详解
May 14 Javascript
node.js使用redis储存session的方法
Sep 26 Javascript
js实现搜索栏效果
Nov 16 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+Mysql+jQuery实现动态展示信息
2011/10/08 PHP
洪恩在线成语词典小偷程序php版
2012/04/20 PHP
destoon整合UCenter图文教程
2014/06/21 PHP
php之Smarty模板使用方法示例详解
2014/07/08 PHP
学习php设计模式 php实现桥梁模式(bridge)
2015/12/07 PHP
使用php+swoole对client数据实时更新(一)
2016/01/07 PHP
PHP云打印类完整示例
2016/10/15 PHP
JavaScript 中的replace方法说明
2007/04/13 Javascript
图像替换新技术 状态域方法
2010/01/28 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
详解Jquery实现ready和bind事件
2016/04/14 Javascript
javascript基本数据类型及类型检测常用方法小结
2016/12/14 Javascript
$.browser.msie 为空或不是对象问题的多种解决方法
2017/03/19 Javascript
get  post jsonp三种数据交互形式实例详解
2017/08/25 Javascript
前端防止用户重复提交js实现代码示例
2018/09/07 Javascript
使用zrender.js绘制体温单效果
2019/10/31 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
2020/08/04 Javascript
Python3.x对JSON的一些操作示例
2017/09/01 Python
Python实现的选择排序算法原理与用法实例分析
2017/11/22 Python
Python2.7.10以上pip更新及其他包的安装教程
2018/06/12 Python
PyQt编程之如何在屏幕中央显示窗体的实例
2019/06/18 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
使用pandas库对csv文件进行筛选保存
2020/05/25 Python
python批量生成身份证号到Excel的两种方法实例
2021/01/14 Python
简单掌握CSS3中resize属性的用法
2016/04/01 HTML / CSS
尤妮佳moony海外旗舰店:日本殿堂级纸尿裤品牌
2018/02/23 全球购物
自强之星事迹材料
2014/05/12 职场文书
幸福终点站观后感
2015/06/04 职场文书
感谢信的技巧及范例
2019/05/15 职场文书
python实现批量移动文件
2021/04/05 Python
用基于python的appium爬取b站直播消费记录
2021/04/17 Python
分享3个非常实用的 Python 模块
2022/03/03 Python
java开发双人五子棋游戏
2022/05/06 Java/Android
Linux中各个目录的作用与内容
2022/06/28 Servers
VW、VH适配移动端的解决方案与常见问题
2023/05/21 HTML / CSS