本文实例讲述了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小时内与您取得联系。