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 相关文章推荐
在textarea中屏蔽js的某个function的javascript代码
Apr 20 Javascript
谈谈关于JavaScript 中的 MVC 模式
Apr 11 Javascript
JS获取计算机mac地址以及IP的实现方法
Jan 08 Javascript
jquery解析JSON数据示例代码
Mar 17 Javascript
JavaScript设计模式学习之“类式继承”
Mar 12 Javascript
jquery中trigger()无法触发hover事件的解决方法
May 07 Javascript
三种Node.js写文件的方式
Mar 08 Javascript
ES6中Symbol类型用法实例详解
Apr 06 Javascript
webuploader实现上传图片到服务器功能
Aug 16 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
Sep 28 Javascript
详解webpack loader和plugin编写
Oct 12 Javascript
详解React项目中碰到的IE问题
Mar 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 socke 向指定页面提交数据
2008/07/23 PHP
jQuery 源码分析笔记
2011/05/25 PHP
phpmyadmin config.inc.php配置示例
2013/08/27 PHP
100行PHP代码实现socks5代理服务器
2016/04/28 PHP
JavaScript实现点击按钮后变灰避免多次重复提交
2013/07/15 Javascript
javascript实现的元素拖动函数宿主为浏览器
2014/07/21 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
2016/05/18 Javascript
AngularJS  $modal弹出框实例代码
2016/08/24 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
2016/11/25 Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
2016/12/28 Javascript
微信小程序 UI与容器组件总结
2017/02/21 Javascript
解决vue-cli中stylus无法使用的问题方法
2017/06/19 Javascript
Vue组件教程之Toast(Vue.extend 方式)详解
2019/01/27 Javascript
JS实现音量控制拖动
2020/01/15 Javascript
Vue父子传递实例讲解
2020/02/14 Javascript
js点击事件的执行过程实例分析【冒泡与捕获】
2020/04/11 Javascript
python简单实现获取当前时间
2016/08/27 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
2016/12/15 Python
Python实现购物系统(示例讲解)
2017/09/13 Python
简单的python协同过滤程序实例代码
2018/01/31 Python
Python3.5装饰器典型案例分析
2019/04/30 Python
Django自定义用户表+自定义admin后台中的字段实例
2019/11/18 Python
django 解决扩展自带User表遇到的问题
2020/05/14 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
2020/09/29 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
英国最大的奢侈品零售网络商城:Flannels
2016/09/16 全球购物
澳大利亚连衣裙和女装在线:Esther
2017/11/11 全球购物
英国奢侈品概念店:Base Blu
2019/05/16 全球购物
门卫岗位职责
2013/11/15 职场文书
《落花生》教学反思
2014/02/25 职场文书
仓管员岗位职责范本
2015/04/01 职场文书
2015年团支书工作总结
2015/04/03 职场文书
战友聚会致辞
2015/07/28 职场文书
Python opencv缺陷检测的实现及问题解决
2021/04/24 Python
在Docker容器中部署SQL Server
2022/04/11 Servers