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 相关文章推荐
解读IE和firefox下JScript和HREF的执行顺序
Jan 12 Javascript
jQuery 使用个人心得
Feb 26 Javascript
js 处理URL实用技巧
Nov 23 Javascript
Jquery中对数组的操作代码
Aug 12 Javascript
JS中showModalDialog 的使用解析
Apr 17 Javascript
JS实现时间格式化的方式汇总
Oct 16 Javascript
swtich/if...else的替代语句
Aug 16 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
Oct 17 Javascript
javascript replace()第二个参数为函数时的参数用法
Dec 26 Javascript
微信小程序 上传头像的实例详解
Oct 27 Javascript
Vuejs监听vuex中值的变化的方法示例
Dec 02 Javascript
ES6 新增的创建数组的方法(小结)
Aug 01 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 XML操作类DOMDocument
2009/12/16 PHP
php include加载文件两种方式效率比较
2010/08/08 PHP
thinkphp中ajax与php响应过程详解
2014/12/08 PHP
简单了解PHP编程中数组的指针的使用
2015/11/30 PHP
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
2011/09/28 Javascript
JS跨域代码片段
2012/08/30 Javascript
js调用后台servlet方法实例
2013/06/09 Javascript
get(0).tagName获得作用标签示例代码
2014/10/08 Javascript
jQuery对于显示和隐藏等常用状态的判断方法
2014/12/13 Javascript
js实现同一页面多个运动效果的方法
2015/04/10 Javascript
简单了解JavaScript操作XPath的一些基本方法
2016/06/03 Javascript
js验证真实姓名与身份证号,手机号的简单实例
2016/07/18 Javascript
Three.js学习之几何形状
2016/08/01 Javascript
JS实现的四级密码强度检测功能示例
2017/05/11 Javascript
Vue中的methods、watch、computed的区别
2018/11/26 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
Vue渲染过程浅析
2019/03/14 Javascript
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
2019/05/12 Javascript
Node.js API详解之 timer模块用法实例分析
2020/05/07 Javascript
Python实现自定义顺序、排列写入数据到Excel的方法
2018/04/23 Python
Python实现识别图片内容的方法分析
2018/07/11 Python
python-opencv颜色提取分割方法
2018/12/08 Python
解决Python下json.loads()中文字符出错的问题
2018/12/19 Python
用python实现刷点击率的示例代码
2019/02/21 Python
Python PIL图片添加字体的例子
2019/08/22 Python
pyecharts在数据可视化中的应用详解
2020/06/08 Python
详解numpy.ndarray.reshape()函数的参数问题
2020/10/13 Python
巴西最大的巴士票务门户:Quero Passagem
2020/11/21 全球购物
计算机专业自荐信
2013/10/14 职场文书
军训自我鉴定200字
2014/02/13 职场文书
售后客服个人自我评价
2014/09/14 职场文书
软件研发工程师岗位职责
2014/09/30 职场文书
2015年六一儿童节演讲稿
2015/03/19 职场文书
从QQtabBar看css命名规范BEM的详细介绍
2021/08/07 HTML / CSS
OpenCV实现常见的四种图像几何变换
2022/04/01 Python
vue里使用create, mounted调用方法
2022/04/26 Vue.js