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访问XML数据的实例
Dec 27 Javascript
始终在屏幕中间显示Div的代码(css+js)
Mar 10 Javascript
jQuery动态添加删除select项(实现代码)
Sep 03 Javascript
JavaScript实现简单图片滚动附源码下载
Jun 17 Javascript
jquery uploadify 在FF下无效的解决办法
Sep 26 Javascript
js实现鼠标点击文本框自动选中内容的方法
Aug 20 Javascript
JS中多种方式创建对象详解
Mar 22 Javascript
es6学习笔记之Async函数的使用示例
May 11 Javascript
JS div匀速移动动画与变速移动动画代码实例
Mar 26 Javascript
100行代码实现vue表单校验功能(小白自编)
Nov 19 Javascript
vue中实现高德定位功能
Dec 03 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
Nov 06 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 开发环境配置(测试开发环境)
2010/04/28 PHP
最新用php获取谷歌PR值算法,附上php查询PR值代码示例
2011/12/25 PHP
PHP跨时区(UTC时间)应用解决方案
2013/01/11 PHP
七款最流行的PHP本地服务器分享
2013/02/19 PHP
phpmailer简单发送邮件的方法(附phpmailer源码下载)
2016/06/13 PHP
你必须知道的JavaScript 变量命名规则详解
2013/05/07 Javascript
SwfUpload在IE10上不出现上传按钮的解决方法
2013/06/25 Javascript
js实现登陆遮罩效果的方法
2015/07/28 Javascript
JavaScript实现网页加载进度条代码超简单
2015/09/21 Javascript
javascript日期格式化方法汇总
2015/10/04 Javascript
跟我学习javascript的异步脚本加载
2015/11/20 Javascript
基于zepto.js简单实现上传图片
2016/06/21 Javascript
js改变style样式和css样式的简单实例
2016/06/28 Javascript
js实现键盘自动打字效果
2016/12/23 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
2017/03/09 Javascript
微信小程序 动态绑定事件并实现事件修改样式
2017/04/13 Javascript
vue 路由嵌套高亮问题的解决方法
2018/05/17 Javascript
微信小程序城市选择及搜索功能的方法
2019/03/22 Javascript
在vue中使用setInterval的方法示例
2019/04/16 Javascript
Python3.2模拟实现webqq登录
2016/02/15 Python
实例讲解Python中SocketServer模块处理网络请求的用法
2016/06/28 Python
一篇文章读懂Python赋值与拷贝
2018/04/19 Python
使用Python自动生成HTML的方法示例
2019/08/06 Python
pytorch中torch.max和Tensor.view函数用法详解
2020/01/03 Python
python 函数嵌套及多函数共同运行知识点讲解
2020/03/03 Python
Python多线程多进程实例对比解析
2020/03/12 Python
CSS3 calc()会计算属性详解
2018/02/27 HTML / CSS
简述索引存取方法的作用和建立索引的原则
2013/03/26 面试题
给老师的检讨书
2014/02/11 职场文书
会计与审计专业自荐信范文
2014/03/15 职场文书
反邪教警示教育方案
2014/05/13 职场文书
食品安全承诺书
2014/05/22 职场文书
宣传口号大全
2014/06/16 职场文书
农村文化建设标语
2014/10/07 职场文书
师德师风个人总结
2015/02/06 职场文书
个人承诺书格式范文
2015/04/29 职场文书