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十个最常用的自定义函数(中文版)
Sep 07 Javascript
node.js中的querystring.unescape方法使用说明
Dec 10 Javascript
js实现星星打分效果的方法
Jul 05 Javascript
jquery中表单 多选框的一种巧妙写法
Sep 06 Javascript
jQuery遮罩层效果实例分析
Jan 14 Javascript
Bootstrap表单组件教程详解
Apr 26 Javascript
JavaScript实现广告弹窗效果
Aug 09 Javascript
在vue项目中优雅的使用SVG的方法实例详解
Dec 03 Javascript
详解如何快速配置webpack多入口脚手架
Dec 28 Javascript
在vue项目中引入highcharts图表的方法
Jan 21 Javascript
JS使用数组实现的队列功能示例
Mar 04 Javascript
vue 中 命名视图的用法实例详解
Aug 14 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 下载文件时自动添加bom头的方法实例
2014/01/10 PHP
PHP模拟post提交数据方法汇总
2016/02/16 PHP
php利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
2017/03/15 PHP
JavaScript使用prototype定义对象类型(转)[
2006/12/22 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
JavaScript验证Email(3种方法)
2015/09/21 Javascript
js密码强度校验
2015/11/10 Javascript
jQuery检查元素存在性(推荐)
2016/09/17 Javascript
vue组件实例解析
2017/01/10 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
JavaScript 中的12种循环遍历方法【总结】
2018/05/31 Javascript
使用javascript做时间倒数读秒功能的实例
2019/01/23 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
Typescript的三种运行方式(小结)
2019/09/18 Javascript
python使用pil生成缩略图的方法
2015/03/26 Python
Python中str is not callable问题详解及解决办法
2017/02/10 Python
Python匿名函数及应用示例
2019/04/09 Python
Django实现文件上传和下载功能
2019/10/06 Python
解决python web项目意外关闭,但占用端口的问题
2019/12/17 Python
树莓派升级python的具体步骤
2020/07/05 Python
使用python把xmind转换成excel测试用例的实现代码
2020/10/12 Python
HTML5 Canvas绘制文本及图片的基础教程
2016/03/14 HTML / CSS
HQhair美国/加拿大:英国化妆品、美容及美发产品商城
2019/04/15 全球购物
毕业生自我鉴定
2013/12/04 职场文书
小学教研工作制度
2014/01/15 职场文书
党课知识竞赛主持词
2014/04/01 职场文书
《莫泊桑拜师》教学反思
2014/04/23 职场文书
快餐公司创业计划书
2014/04/29 职场文书
优秀管理者事迹材料
2014/05/22 职场文书
英语教育专业自荐信
2014/05/29 职场文书
法人任命书范本
2014/06/04 职场文书
党员批评与自我批评思想汇报(集锦)
2014/09/14 职场文书
老舍《猫》教学反思
2016/02/17 职场文书
Pyhton模块和包相关知识总结
2021/05/12 Python