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 相关文章推荐
关于juqery radio写法的兼容性问题(新老版本jquery)
Jun 14 Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
Oct 22 Javascript
js Date概念详细介绍
Nov 22 Javascript
jquery为页面增加快捷键示例
Jan 31 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
Oct 23 Javascript
jquery.cookie实现的客户端购物车操作实例
Dec 24 Javascript
javascript使用闭包模拟对象的私有属性和方法
Oct 05 Javascript
原生js实现网页顶部自动下拉/收缩广告效果
Jan 20 Javascript
angular4强制刷新视图的方法
Oct 09 Javascript
微信小程序实现选择地址省市区三级联动
Jun 21 Javascript
原生小程序封装跑马灯效果
Oct 21 Javascript
微信小程序实现modal弹出框遮罩层组件(可带文本框)
Dec 20 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
PHP图像处理 imagestring添加图片水印与文字水印操作示例
2020/02/06 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
2020/04/14 PHP
javascript 支持链式调用的异步调用框架Async.Operation
2009/08/04 Javascript
jQuery 表格插件整理
2010/04/27 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
2015/08/07 Javascript
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
javascript中checkbox使用方法简单实例演示
2015/11/17 Javascript
轻松实现js弹框显示选项
2016/09/13 Javascript
html判断当前页面是否在iframe中的实例
2016/11/30 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
2016/12/28 Javascript
利用jQuery实现一个简单的表格上下翻页效果
2017/03/14 Javascript
纯jQuery实现前端分页功能
2017/03/23 jQuery
详解Node.js开发中的express-session
2017/05/19 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
2018/02/06 Javascript
JS获取当前时间的实例代码(昨天、今天、明天)
2018/11/13 Javascript
highCharts提示框中显示当前时间的方法
2019/01/18 Javascript
Vue 中如何正确引入第三方模块的方法步骤
2019/05/05 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
在Python的Django框架中生成CSV文件的方法
2015/07/22 Python
python flask 多对多表查询功能
2017/06/25 Python
python获取当前目录路径和上级路径的实例
2018/04/26 Python
如何利用Python开发一个简单的猜数字游戏
2019/09/22 Python
python 上下文管理器及自定义原理解析
2019/11/19 Python
python全局变量引用与修改过程解析
2020/01/07 Python
Python实现链表反转的方法分析【迭代法与递归法】
2020/02/22 Python
Django rest framework分页接口实现原理解析
2020/08/21 Python
CSS3之2D与3D变换的实现方法
2019/01/28 HTML / CSS
世界上最大的二手相机店:KEN
2017/05/17 全球购物
开学寄语大全
2014/04/08 职场文书
初二学习计划书范文
2014/04/27 职场文书
2014年师德师风学习材料
2014/05/16 职场文书
2015选调生工作总结
2015/07/24 职场文书
学者《孟子》名人名言
2019/08/09 职场文书
mysq启动失败问题及场景分析
2021/07/15 MySQL