总结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 相关文章推荐
mapper--图片热点区域高亮组件官方站点
Dec 22 Javascript
WEB 浏览器兼容 推荐收藏
May 14 Javascript
JavaScript获得当前网页来源页面(即上一页)的方法
Apr 03 Javascript
javascript实现获取服务器时间
May 19 Javascript
jquery基本选择器匹配多个元素的实现方法
Sep 05 Javascript
vue+vux实现移动端文件上传样式
Jul 28 Javascript
微信小程序switch开关选择器使用详解
Jan 31 Javascript
layui 监听表格复选框选中值的方法
Aug 15 Javascript
浅谈webpack4.x 入门(一篇足矣)
Sep 05 Javascript
深入理解Vue keep-alive及实践总结
Aug 21 Javascript
vue实现井字棋游戏
Sep 29 Javascript
vue 在单页面应用里使用二级套嵌路由
Dec 19 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和oracle数据库性能比较
2006/10/09 PHP
默默小谈PHP&amp;MYSQL分页原理及实现
2007/01/02 PHP
mysql 搜索之简单应用
2007/04/27 PHP
PHP curl_setopt()函数实例代码与参数分析
2011/06/02 PHP
php教程之魔术方法的使用示例(php魔术函数)
2014/02/12 PHP
PHP常用正则表达式集锦
2014/08/17 PHP
thinkPHP自动验证机制详解
2016/12/05 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
JavaScript的事件绑定(方便不支持js的时候)
2013/10/01 Javascript
javascript实现文本域写入字符时限定字数
2014/02/12 Javascript
javascript实现方法调用与方法触发小结
2016/03/26 Javascript
jQuery根据ID、CLASS、等获取对象的实例
2016/12/04 Javascript
JavaScript 实现 Tab 点击切换实例代码
2017/03/25 Javascript
bootstrap daterangepicker汉化以及扩展功能
2017/06/15 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
vue组件实现进度条效果
2018/06/06 Javascript
Vue封装全局过滤器Filters的步骤
2020/09/16 Javascript
Vue 3.0中jsx语法的使用
2020/11/13 Javascript
JS实现可以用键盘方向键控制的动画
2020/12/11 Javascript
[04:52]DOTA2亚洲邀请赛附加赛 TOP10精彩集锦
2015/01/29 DOTA
Python文件去除注释的方法
2015/05/25 Python
Python中的__slots__示例详解
2017/07/06 Python
pycharm修改文件的默认打开方式的步骤
2019/07/29 Python
PyTorch 普通卷积和空洞卷积实例
2020/01/07 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
2020/05/03 Python
html5需遵循的6个设计原则
2016/04/27 HTML / CSS
德国足球商店:OUTFITTER
2019/05/06 全球购物
街头时尚在线:JESSICABUURMAN
2019/06/16 全球购物
《乡愁》教学反思
2014/02/18 职场文书
体育口号大全
2014/06/18 职场文书
赵氏孤儿观后感
2015/06/09 职场文书
2015初中政教处工作总结
2015/07/21 职场文书
MongoDB安装使用并实现Python操作数据库
2021/06/28 MongoDB
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP
Oracle中update和select 关联操作
2022/01/18 Oracle
Win11 Build 25179预览版发布(附更新内容+ISO官方镜像下载)
2022/08/14 数码科技