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 相关文章推荐
js 字符串转换成数字的三种方法
Mar 23 Javascript
js获取json元素数量的方法
Jan 27 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
Feb 28 Javascript
包含中国城市的javascript对象实例
Aug 03 Javascript
jQuery Validate表单验证插件 添加class属性形式的校验
Jan 18 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
Nov 17 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
Dec 08 Javascript
js数组方法reduce经典用法代码分享
Jan 07 Javascript
搭建element-ui的Vue前端工程操作实例
Feb 23 Javascript
Node.js 使用axios读写influxDB的方法示例
Oct 26 Javascript
详解Vue项目部署遇到的问题及解决方案
Jan 11 Javascript
JS数据类型判断的几种常用方法
Jul 07 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常用函数小技巧
2008/09/11 PHP
php中防止伪造跨站请求的小招式
2011/09/02 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
基于JQuery的动态删除Table表格的行和列的代码
2011/05/12 Javascript
JavaScript NaN和Infinity特殊值 [译]
2012/09/20 Javascript
Js中获取frames中的元素示例代码
2013/07/30 Javascript
一行命令搞定node.js 版本升级
2014/07/20 Javascript
Javascript让DEDECMS告别手写Tag
2014/09/01 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
2016/03/05 Javascript
socket.io学习教程之深入学习篇(三)
2017/04/29 Javascript
Angular4学习笔记之实现绑定和分包
2017/08/01 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
使用npm安装最新版本nodejs
2018/01/18 NodeJs
微信小程序日期时间选择器使用方法
2018/02/01 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
2018/03/27 Javascript
微信小程序开发实现的IP地址查询功能示例
2019/03/28 Javascript
微信小程序中悬浮窗功能的实现代码
2019/08/02 Javascript
jquery 键盘事件 keypress() keydown() keyup()用法总结
2019/10/23 jQuery
解决vue+webpack项目接口跨域出现的问题
2020/08/10 Javascript
Python3实现连接SQLite数据库的方法
2014/08/23 Python
python多线程threading.Lock锁用法实例
2014/11/01 Python
python数组复制拷贝的实现方法
2015/06/09 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
2017/09/22 Python
python实现自动发送邮件
2018/06/20 Python
Python_查看sqlite3表结构,查询语句的示例代码
2019/07/17 Python
python中的itertools的使用详解
2020/01/13 Python
python Shapely使用指南详解
2020/02/18 Python
python 实现读取csv数据,分类求和 再写进 csv
2020/05/18 Python
html5 canvas-2.用canvas制作一个猜字母的小游戏
2013/01/07 HTML / CSS
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
成都思必达公司C#程序员招聘面试题
2013/06/26 面试题
护理毕业生自我鉴定
2014/02/11 职场文书
手把手带你彻底卸载MySQL数据库
2022/06/14 MySQL