javascript数组去重常用方法实例分析
发布时间 - 2026-01-11 00:36:09 点击率:次本文实例讲述了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数据结构之数组的表示方法示例
# 遍历
# 种方法
# 组中
# 的是
# 相关内容
# 零时
# 很容易
# 感兴趣
# 我们可以
# 数据结构
# 可以通过
# 给大家
# 可以看到
# 几种
# 要比
# 时就
# 更多关于
# 所述
# 最常见
# 创建一个
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何彻底删除建站之星生成的Banner?
如何在云指建站中生成FTP站点?
Laravel如何实现API资源集合?(Resource Collection教程)
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
canvas 画布在主流浏览器中的尺寸限制详细介绍
潮流网站制作头像软件下载,适合母子的网名有哪些?
JavaScript如何实现错误处理_try...catch如何捕获异常?
如何在Windows环境下新建FTP站点并设置权限?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
JavaScript如何实现类型判断_typeof和instanceof有什么区别
js代码实现下拉菜单【推荐】
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
济南网站建设制作公司,室内设计网站一般都有哪些功能?
网站制作企业,网站的banner和导航栏是指什么?
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
深圳网站制作培训,深圳哪些招聘网站比较好?
郑州企业网站制作公司,郑州招聘网站有哪些?
Android okhttputils现在进度显示实例代码
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
EditPlus中的正则表达式实战(6)
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
js实现点击每个li节点,都弹出其文本值及修改
微信小程序 input输入框控件详解及实例(多种示例)
Android GridView 滑动条设置一直显示状态(推荐)
,网页ppt怎么弄成自己的ppt?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
如何快速生成橙子建站落地页链接?
php 三元运算符实例详细介绍
微信小程序 wx.uploadFile无法上传解决办法
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
Laravel如何自定义分页视图?(Pagination示例)
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
如何快速搭建高效可靠的建站解决方案?
Laravel集合Collection怎么用_Laravel集合常用函数详解
Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
PythonWeb开发入门教程_Flask快速构建Web应用
如何自定义建站之星网站的导航菜单样式?
制作公司内部网站有哪些,内网如何建网站?
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
Laravel如何创建自定义Artisan命令?(代码示例)
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
Laravel如何创建自定义中间件?(Middleware代码示例)
html5的keygen标签为什么废弃_替代方案说明【解答】

