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 相关文章推荐
Jquery获取和修改img的src值的方法
Feb 17 Javascript
Jquery Post处理后不进入回调的原因及解决方法
Jul 15 Javascript
Jquery动态添加输入框的方法
May 29 Javascript
Bootstrap每天必学之导航
Nov 26 Javascript
jQuery toggle 代替方法
Mar 22 Javascript
JS产生随机数的几个用法详解
Jun 22 Javascript
Javascript中的对象和原型(二)
Aug 12 Javascript
HTML5+jQuery实现搜索智能匹配功能
Mar 24 jQuery
JS获取短信验证码倒计时的实现代码
May 22 Javascript
详解angularjs popup-table 弹出框表格指令
Sep 20 Javascript
详解TypeScript+Vue 插件 vue-class-component的使用总结
Feb 18 Javascript
vue 项目 iOS WKWebView 加载
Apr 17 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设计模式 Delegation(委托模式)
2011/06/26 PHP
php实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
CodeIgniter中使用Smarty3基本配置
2015/06/29 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
2018/05/23 PHP
PHP读取文件或采集时解决中文乱码
2021/03/09 PHP
jquery 最简单的属性菜单
2009/10/08 Javascript
解析javascript 浏览器关闭事件
2013/07/08 Javascript
Checbox的操作含已选、未选及判断代码
2013/11/07 Javascript
node.js 开发指南 ? Node.js 连接 MySQL 并进行数据库操作
2014/07/29 Javascript
js构造函数、索引数组和属性的实现方式和使用
2014/11/16 Javascript
javascript结合canvas实现图片旋转效果
2015/05/03 Javascript
Bootstrap轮播插件简单使用方法介绍
2016/06/21 Javascript
ThinkJS中如何使用MongoDB的CURD操作
2016/12/13 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
2017/01/24 Javascript
详解vue-router 2.0 常用基础知识点之router.push()
2017/05/10 Javascript
小程序清理本地缓存的方法
2018/08/17 Javascript
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
2019/04/18 Javascript
微信小程序实现同一页面取值的方法分析
2019/04/30 Javascript
微信小程序实现张图片合成为一张并下载
2019/07/16 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
[02:27]刀塔重生降临
2015/10/14 DOTA
python之wxPython应用实例
2014/09/28 Python
python解析基于xml格式的日志文件
2017/02/25 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
Python堆排序原理与实现方法详解
2018/05/11 Python
python rsync服务器之间文件夹同步脚本
2019/08/29 Python
python列表插入append(), extend(), insert()用法详解
2019/09/14 Python
在Django下创建项目以及设置settings.py教程
2019/12/03 Python
django 多数据库及分库实现方式
2020/04/01 Python
Python2手动安装更新pip过程实例解析
2020/07/16 Python
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
比利时买床:Beter Bed
2017/12/06 全球购物
视图的作用
2014/12/19 面试题
四风问题自查自纠工作情况报告
2014/10/28 职场文书
解除同居协议书
2015/01/29 职场文书
golang语言指针操作
2022/04/14 Golang