JavaScript常见的五种数组去重的方式

发布时间 - 2026-01-10 21:50:30    点击率:

大致介绍

JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结

先来建立一个数组

var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN];

第一种

思路:建立一个临时数组,用for循环去依次判断arr中的每个项在临时数组中是否有相同的值,如果没有则将这个值添加到临时数组,如果有相同的值则不添加,最后返回这个临时数组

代码:

Array.prototype.removeDuplicate = function(){
  var n = [];
  for(var i=0;i<this.length;i++){
  if(n.indexOf(this[i]) == -1 ){
  n.push(this[i]);
  }
  }
 return n;
}
var m = arr.removeDuplicate();
console.log(m);//[1, 2, 3, "我", 34, "我的", NaN, NaN]

注意:不会去掉重复的NaN值

第二种   

思路:建立一个临时数组,用for循环利用indexOf()方法去依次判断arr中的每个项在arr中第一次出现的位置,如果这个项在arr中第一次出现的位置就是它的位置,表明在它之前没有相同的值则把它添加到临时数组中,如果这个项在arr中第一次出现的位置不是他的位置则表明在它之前有相同的值,则不把他添加到临时数组中;最后返回临时数组

代码:

Array.prototype.removeDuplicate = function(){
  var n = [];
  for(var i=0;i<this.length-1;i++){
  if(this.indexOf(this[i]) == i){
  n.push(this[i]);
  }
  }
 return n;
 }
 var m = arr.removeDuplicate();
 console.log(m);//[1, 2, 3, "我", 34, "我的"]

注意:会把NaN值删除

第三种

思路:建立一个临时对象,利用for循环检测这个临时对象有没有arr[i]这个属性,如果没有这个属性表明arr[i]在它之前没有和它重复的值。把临时对象的arr[i]属性设置为true,表明有这个属性并把这个项添加到临时数组中;最后返回临时数组

代码:

Array.prototype.removeDuplicate = function(){
  var n = [],m = {};
  for(var i=0;i<this.length;i++){
  if(!m[this[i]]){
  m[this[i]] = true;
  n.push(this[i]);
  }
  }
 return n;
 }
var m = arr.removeDuplicate();
console.log(m);//[1, 2, 3, "我", 34, "我的", NaN]

第四种

思路:先将这个数组排序,然后比较每个项和它后面的项的值是否相等,如果不相等则添加到临时数组中;最后返回临时数组

代码:

Array.prototype.removeDuplicate = function(){
 var n = [];
 this.sort();
 for(var i=0;i<this.length;i++){
 if(this[i] != this[i+1]){
  n.push(this[i]);
  }
 }
 return n;
 }
var m = arr.removeDuplicate();
console.log(m);//[1, 2, 3, 34, NaN, NaN, "我", "我的"]

注意:不会去掉重复的NaN值

第五种

思路:利用ES6的方法set方法去重,并用Array.from转换为数组

set是一种新的数据结构,它可以接收一个数组或者是类数组对象,自动去重其中的重复项目,返回一个对象

代码:

Array.prototype.removeDuplicate = function(){
 return (Array.from(new Set(this)));
 }
 var m = arr.removeDuplicate();
 console.log(m);//[1, 2, 3, "我", 34, "我的", NaN]

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# js  # 数组去重  # JavaScript数组去重和扁平化函数介绍  # JS数组去重详情  # JavaScript数组去重的几种方法详谈  # JavaScript数组去重方案  # JavaScript 数组去重详解  # 七种JS实现数组去重的方式  # 建立一个  # 组中  # 如果没有  # 是一种  # 把他  # 数据结构  # 或者是  # 做个  # 它可以  # 会把  # 设置为  # 并把  # 转换为  # 五种  # 先将  # 先来  # 第二种  # 第一种  # 则将  # 第三种 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  HTML 中如何正确使用模板变量为元素的 name 属性赋值  如何快速辨别茅台真假?关键步骤解析  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  html5的keygen标签为什么废弃_替代方案说明【解答】  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  如何在IIS服务器上快速部署高效网站?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  Bootstrap CSS布局之列表  微信小程序 HTTPS报错整理常见问题及解决方案  Laravel怎么使用artisan命令缓存配置和视图  如何在 Pandas 中基于一列条件计算另一列的分组均值  如何快速搭建高效服务器建站系统?  Laravel如何与Pusher实现实时通信?(WebSocket示例)  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  企业网站制作这些问题要关注  Laravel如何使用模型观察者?(Observer代码示例)  南京网站制作费用,南京远驱官方网站?  高防服务器租用如何选择配置与防御等级?  Java解压缩zip - 解压缩多个文件或文件夹实例  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  焦点电影公司作品,电影焦点结局是什么?  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  Java遍历集合的三种方式  php打包exe后无法访问网络共享_共享权限设置方法【教程】  Laravel如何升级到最新版本?(升级指南和步骤)  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  如何在宝塔面板中创建新站点?  JavaScript如何实现类型判断_typeof和instanceof有什么区别  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  JS实现鼠标移上去显示图片或微信二维码  深圳网站制作的公司有哪些,dido官方网站?  如何用AWS免费套餐快速搭建高效网站?  Python进程池调度策略_任务分发说明【指导】  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  活动邀请函制作网站有哪些,活动邀请函文案?  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  nodejs redis 发布订阅机制封装实现方法及实例代码  如何在香港免费服务器上快速搭建网站?  Linux后台任务运行方法_nohup与&使用技巧【技巧】  Python自动化办公教程_ExcelWordPDF批量处理案例  JavaScript中的标签模板是什么_它如何扩展字符串功能