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


Posted in Javascript onDecember 15, 2016

大致介绍

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]

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

Javascript 相关文章推荐
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
Jun 02 Javascript
javascript 操作select下拉列表框的一点小经验
Mar 20 Javascript
jQuery中nextUntil()方法用法实例
Jan 07 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
Aug 15 Javascript
AngularJS入门教程之 XMLHttpRequest实例讲解
Jul 27 Javascript
javascript 内置对象及常见API详细介绍
Nov 01 Javascript
基于JavaScript实现自动更新倒计时效果
Dec 19 Javascript
js实现自定义进度条效果
Mar 15 Javascript
微信小程序实现列表下拉刷新上拉加载
Jul 29 Javascript
Vue2.0仿饿了么webapp单页面应用详细步骤
Jul 08 Javascript
深入浅析var,let,const的异同点
Aug 07 Javascript
JS实现商城秒杀倒计时功能(动态设置秒杀时间)
Dec 12 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
Dec 15 #Javascript
手机软键盘弹出时影响布局的解决方法
Dec 15 #Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
Dec 15 #Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
Dec 15 #Javascript
JavaScript实现Fly Bird小游戏
Dec 15 #Javascript
JS中对数组元素进行增删改移的方法总结
Dec 15 #Javascript
JS去除重复并统计数量的实现方法
Dec 15 #Javascript
You might like
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
ThinkPHP提交表单时默认自动转义的解决方法
2014/11/25 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
详解php框架Yaf路由重写
2017/06/20 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
在b/s开发中经常用到的javaScript技术
2006/08/23 Javascript
jQuery实战之品牌展示列表效果
2011/04/10 Javascript
基于jQuery实现下拉框
2014/11/24 Javascript
Javascript中prototype属性实现给内置对象添加新的方法
2015/05/14 Javascript
js实现简单秒表走动的时钟特效
2020/03/25 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
2015/11/24 Javascript
js实现的星星评分功能函数
2015/12/09 Javascript
详解vue slot插槽的使用方法
2017/06/13 Javascript
JavaScript数组push方法使用注意事项
2017/10/30 Javascript
JS 使用 window对象的print方法实现分页打印功能
2018/05/16 Javascript
layui实现checkbox的目录树tree的例子
2019/09/12 Javascript
Python使用百度API上传文件到百度网盘代码分享
2014/11/08 Python
Python中用pycurl监控http响应时间脚本分享
2015/02/02 Python
Python中使用logging和traceback模块记录日志和跟踪异常
2019/04/09 Python
python防止随意修改类属性的实现方法
2019/08/21 Python
Python实现新型冠状病毒传播模型及预测代码实例
2020/02/05 Python
Django的CVB实例详解
2020/02/10 Python
Python如何对XML 解析
2020/06/28 Python
Python读取xlsx数据生成图标代码实例
2020/08/12 Python
python压包的概念及实例详解
2021/02/17 Python
国际知名军事风格休闲装品牌:Alpha Industries(阿尔法工业)
2017/05/24 全球购物
北美三大旅游网站之一:Travelocity
2017/08/12 全球购物
英国办公用品商店:Office Outlet
2018/04/04 全球购物
自动一体化专业求职信
2014/03/15 职场文书
带病坚持工作事迹
2014/05/03 职场文书
2014年精神文明建设工作总结
2014/11/19 职场文书
小学生差生评语
2014/12/29 职场文书
贫民窟的百万富翁观后感
2015/06/09 职场文书
观看安全警示教育片心得体会
2016/01/15 职场文书
css3 选择器
2022/05/11 HTML / CSS