全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

javascript数组去重常用方法实例分析

本文实例讲述了javascript数组去重常用方法。分享给大家供大家参考,具体如下:

数组去除重复值是面试常考内容,也是很容易用到的一个技巧,下面就几种去重的方法进行介绍。

首先是最常见的方法,也就是添加一个临时数组,将原数组遍历,加入临时数组,每次加入时判断待加入的元素是否存在于临时数组中,代码如下:

// 对数组进行去重操作,只考虑数组中元素为数字或字符串,返回一个去重后的数组
//第一种方法,遍历,将没有的插入临时数组
function uniqArray1(arr) {
  var n=[];
  for(var i=0;i<arr.length;i++){
    //如果当前项已经保存到了临时数组,则跳过,否则加入
    if(n.indexOf(arr[i])==-1){
      n.push(arr[i]);
    }
  }
  return n;
}

那么还有没有更好的办法呢?可以采用哈希表的思想,在JavaScript中,对象的查找比数组下标的查找要快很多倍。所以我们可以创建一个对象专门来存放已加入临时数组的元素,那么每次加入新的元素时就可以通过查找对象来判断是否重复了,代码如下:

//第二种方法,使用哈希表
function uniqArray2(arr){
  var n={},//哈希表
    r=[];//零时数组
  for(var i=0;i<arr.length;i++){
    if(n[arr[i]]==null){//如果哈希表中没有,则添加到哈希表,且进入临时数组
      n[arr[i]]=true;
      r.push(arr[i]);
    }
  }
  return r;
}

还有一种方法,虽然速度没有哈希表快,但是比最基本的indexOf来的快,思想就是先经过排序函数sort,再比较相邻的元素,不同的就加到临时数组中。代码如下:

//第三种方法,先排序,再比较邻接部分
function uniqArray3(arr){
  arr.sort();
  var r=[arr[0]];
  for(var i=1;i<arr.length;i++){
    if(arr[i]!=r[r.length-1]){//由于已经经过了排序,所以相邻的是相同的
      r.push(arr[i]);
    }
  }
  return r;
}

最后实验代码如下:

//验证数组去重函数的使用
var arr=[2,3,4,2,4,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3];
for(var i=0;i<10000000;i++){//为了分辨出花费时间的区别,特此增加数组的长度
  arr.push(3);
}
var time1=Date.now();
var n1=uniqArray1(arr);
var time2=Date.now();
console.log(n1);//2,3,4,5说明第一种去重成功
console.log(time2-time1);//218
time1=Date.now();
var n2=uniqArray2(arr);
time2=Date.now();
console.log(n2);//2,3,4,5说明第二种去重成功
console.log(time2-time1);//63,说明对象下标的引用要比indexOf搜索快得多
time1=Date.now();
var n3=uniqArray3(arr);
time2=Date.now();
console.log(n3);//2,3,4,5说明第三种去重成功
console.log(time2-time1);//203,说明sort方法使用快排,比indexOf快,但是没有哈希快

可以看到哈希算法的速度是最快的。

PS:这里再为大家提供几款去重复工具供大家参考使用:

在线去除重复项工具:
http://tools./code/quchong

在线文本去重复工具:
http://tools./aideddesign/txt_quchong

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数组操作技巧总结》、《JavaScript排序算法总结》、《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》

希望本文所述对大家JavaScript程序设计有所帮助。


# javascript  # 数组去重  # JavaScript数组实现数据结构中的队列与堆栈  # JS简单实现数组去重的方法示例  # js数组与字符串的相互转换方法  # js数组循环遍历数组内所有元素的方法  # js二维数组定义和初始化的三种方法总结  # Js数组的操作push  # pop  # shift  # unshift等方法详细介绍  # JavaScript数据结构中串的表示与应用实例  # javascript数据结构之串的概念与用法分析  # JavaScript队列的应用实例详解【经典数据结构】  # JavaScript数据结构中栈的应用之表达式求值问题详解  # javascript数据结构中栈的应用之符号平衡问题  # javascript编程实现栈的方法详解【经典数据结构】  # JavaScript数据结构之数组的表示方法示例  # 遍历  # 种方法  # 组中  # 的是  # 相关内容  # 零时  # 很容易  # 感兴趣  # 我们可以  # 数据结构  # 可以通过  # 给大家  # 可以看到  # 几种  # 要比  # 时就  # 更多关于  # 所述  # 最常见  # 创建一个 


相关文章: 北京营销型网站制作公司,可以用python做一个营销推广网站吗?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  开源网站制作软件,开源网站什么意思?  定制建站流程解析:需求评估与SEO优化功能开发指南  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  北京建设网站制作公司,北京古代建筑博物馆预约官网?  简单实现Android文件上传  建设网站制作价格,怎样建立自己的公司网站?  如何通过NAT技术实现内网高效建站?  制作网站公司那家好,网络公司是做什么的?  如何选择域名并搭建高效网站?  如何登录建站主机?访问步骤全解析  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建  岳西云建站教程与模板下载_一站式快速建站系统操作指南  ,怎么用自己头像做动态表情包?  Android自定义listview布局实现上拉加载下拉刷新功能  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  如何规划企业建站流程的关键步骤?  如何访问已购建站主机并解决登录问题?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  已有域名如何免费搭建网站?  如何在阿里云高效完成企业建站全流程?  西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?  如何确认建站备案号应放置的具体位置?  建站之星安装后如何配置SEO及设计样式?  攀枝花网站建设,攀枝花营业执照网上怎么年审?  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  如何在景安云服务器上绑定域名并配置虚拟主机?  图册素材网站设计制作软件,图册的导出方式有几种?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  建站之星如何实现五合一智能建站与营销推广?  如何设置并定期更换建站之星安全管理员密码?  建站之星云端配置指南:模板选择与SEO优化一键生成  建站之星如何开启自定义404页面避免用户流失?  如何配置WinSCP新建站点的密钥验证步骤?  如何正确选择百度移动适配建站域名?  成都网站制作报价公司,成都工业用气开户费用?  大同网页,大同瑞慈医院官网?  临沂网站制作企业,临沂第三中学官方网站?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  ,如何利用word制作宣传手册?  高端建站如何打造兼具美学与转化的品牌官网?  外贸公司网站制作哪家好,maersk船公司官网?  金*站制作公司有哪些,金华教育集团官网?  婚礼视频制作网站,学习*后期制作的网站有哪些?  如何高效完成独享虚拟主机建站?  如何高效完成自助建站业务培训?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。