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 相关文章推荐
网页的标准,IMG不支持onload标签怎么办
Jun 29 Javascript
jquery插件制作 提示框插件实现代码
Aug 17 Javascript
js 对小数加法精度处理示例说明
Dec 27 Javascript
jQuery实现拖拽效果插件的方法
Mar 23 Javascript
js中this用法实例详解
May 05 Javascript
javascript实现textarea中tab键的缩排处理方法
Jun 26 Javascript
JS实现常见的TAB、弹出层效果(TAB标签,斑马线,遮罩层等)
Oct 08 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
May 17 Javascript
理解 Node.js 事件驱动机制的原理
Aug 16 Javascript
node.js中npm包管理工具用法分析
Feb 14 Javascript
基于canvasJS在PHP中制作动态图表
May 30 Javascript
详解nginx配置vue h5 history去除#号
Nov 09 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
ajax+php打造进度条代码[readyState各状态说明]
2010/04/12 PHP
php中rename函数用法分析
2014/11/15 PHP
PHP中字符安全过滤函数使用小结
2015/02/25 PHP
PHP实现文件上传功能实例代码
2017/05/18 PHP
简单谈谈PHP面向对象之标识对象
2017/06/27 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
javascript 解析后的xml对象的读取方法细解
2009/07/25 Javascript
js中的this关键字详解
2013/09/25 Javascript
JavaScript简介
2015/02/15 Javascript
NodeJS Web应用监听sock文件实例
2015/02/18 NodeJs
javascript实现unicode与ASCII相互转换的方法
2015/12/10 Javascript
JS实现touch 点击滑动轮播实例代码
2017/01/19 Javascript
解析Vue2.0双向绑定实现原理
2017/02/23 Javascript
nodejs爬虫遇到的乱码问题汇总
2017/04/07 NodeJs
在微信小程序里使用watch和computed的方法
2018/08/02 Javascript
详解微信小程序网络请求接口封装实例
2019/05/02 Javascript
ElementUI radio组件选中小改造
2019/08/12 Javascript
[01:35:53]完美世界DOTA2联赛PWL S3 Magma vs GXR 第二场 12.13
2020/12/17 DOTA
Python专用方法与迭代机制实例分析
2014/09/15 Python
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
用Python的Flask框架结合MySQL写一个内存监控程序
2015/11/07 Python
Python常用的爬虫技巧总结
2016/03/28 Python
pip命令无法使用的解决方法
2018/06/12 Python
利用Python进行数据可视化常见的9种方法!超实用!
2018/07/11 Python
Pythony运维入门之Socket网络编程详解
2019/04/15 Python
在python plt图表中文字大小调节的方法
2019/07/08 Python
在python中用print()输出多个格式化参数的方法
2019/07/16 Python
Python学习笔记之Zip和Enumerate用法实例分析
2019/08/14 Python
Python改变对象的字符串显示的方法
2020/08/01 Python
校园安全标语
2014/06/07 职场文书
高速铁道技术专业求职信
2014/08/09 职场文书
2014年国庆节广播稿
2014/09/19 职场文书
务虚会发言材料
2014/12/25 职场文书
幼儿园中班个人总结
2015/02/28 职场文书
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
2021/04/27 Python
pytorch--之halfTensor的使用详解
2021/05/24 Python