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


相关推荐: Laravel Blade模板引擎语法_Laravel Blade布局继承用法  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  javascript读取文本节点方法小结  JavaScript数据类型有哪些_如何准确判断一个变量的类型  Angular 表单中正确绑定输入值以确保提交与验证正常工作  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  如何快速搭建支持数据库操作的智能建站平台?  Laravel怎么调用外部API_Laravel Http Client客户端使用  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  如何用搬瓦工VPS快速搭建个人网站?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  如何在Windows服务器上快速搭建网站?  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  如何在七牛云存储上搭建网站并设置自定义域名?  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  活动邀请函制作网站有哪些,活动邀请函文案?  如何在 Pandas 中基于一列条件计算另一列的分组均值  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  ,南京靠谱的征婚网站?  *服务器网站为何频现安全漏洞?  如何实现javascript表单验证_正则表达式有哪些实用技巧  原生JS获取元素集合的子元素宽度实例  高防服务器租用如何选择配置与防御等级?  公司网站制作价格怎么算,公司办个官网需要多少钱?  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  香港服务器如何优化才能显著提升网站加载速度?  如何在云服务器上快速搭建个人网站?  非常酷的网站设计制作软件,酷培ai教育官方网站?  轻松掌握MySQL函数中的last_insert_id()  如何快速搭建个人网站并优化SEO?  微信小程序 require机制详解及实例代码  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  Laravel用户密码怎么加密_Laravel Hash门面使用教程  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  用yum安装MySQLdb模块的步骤方法  北京网站制作的公司有哪些,北京白云观官方网站?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  html5如何实现懒加载图片_ intersectionobserver api用法【教程】