总结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 相关文章推荐
Extjs入门之动态加载树代码
Apr 09 Javascript
JavaScript 判断指定字符串是否为有效数字
May 11 Javascript
Moment.js 不容错过的超棒Javascript日期处理类库
Apr 15 Javascript
图片动画横条广告带上下滚动的JS代码
Oct 25 Javascript
基于socket.io和node.js搭建即时通信系统
Jul 30 Javascript
JavaScript组合拼接字符串的效率对比测试
Nov 06 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
Aug 24 Javascript
javascript使用递归算法求两个数字组合功能示例
Jan 03 Javascript
vue v-model动态生成详解
Jun 30 Javascript
微信小程序收货地址API兼容低版本解决方法
May 18 Javascript
javascript实现蒙版与禁止页面滚动
Jan 11 Javascript
JavaScript获取时区实现过程解析
Sep 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 进程锁定问题分析研究
2009/11/24 PHP
php删除数组元素示例分享
2014/02/17 PHP
PHP两种快速排序算法实例
2015/02/15 PHP
php结合ACCESS的跨库查询功能
2015/06/12 PHP
php+ajax注册实时验证功能
2016/07/20 PHP
laravel框架模型和数据库基础操作实例详解
2020/01/25 PHP
xml 与javascript结合的问题解决方法
2007/03/24 Javascript
Firefox下无法正常显示年份的解决方法
2014/09/04 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
2015/08/25 Javascript
JS常见问题之为什么点击弹出的i总是最后一个
2016/01/05 Javascript
论Bootstrap3和Foundation5网格系统的异同
2016/05/16 Javascript
WEB前端实现裁剪上传图片功能
2016/10/17 Javascript
微信小程序开发一键登录 获取session_key和openid实例
2016/11/23 Javascript
基于vue.js实现图片轮播效果
2016/12/01 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
JS实现显示当前日期的实例代码
2018/07/03 Javascript
亲自动手实现vue日历控件
2019/06/26 Javascript
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
[01:08:09]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第二局
2016/03/02 DOTA
python基础教程之分支、循环简单用法
2016/06/16 Python
Python3随机漫步生成数据并绘制
2018/08/27 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
深入浅析python变量加逗号,的含义
2020/02/22 Python
pycharm软件实现设置自动保存操作
2020/06/08 Python
全球性的在线商店:Vogca
2019/05/10 全球购物
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
加多宝凉茶广告词
2014/03/18 职场文书
企业总经理任命书
2014/06/05 职场文书
工程售后服务方案
2014/06/08 职场文书
在教室放鞭炮的检讨书
2014/09/28 职场文书
公司股份转让协议书范本
2015/01/28 职场文书
2015年世界无烟日活动方案
2015/05/04 职场文书
幼儿园端午节活动总结
2015/05/05 职场文书
小学生心理健康活动总结
2015/05/08 职场文书
公诉意见书范文
2015/06/05 职场文书
中秋节随笔
2015/08/15 职场文书