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 1.0.4 - New Wave Javascript(js源文件)
Jan 15 Javascript
jQuery+jqmodal弹出窗口实现代码分明
Jun 14 Javascript
用js将内容复制到剪贴板兼容浏览器
Mar 18 Javascript
深入分析原生JavaScript事件
Dec 29 Javascript
jQuery中prop()方法用法实例
Jan 05 Javascript
js实现鼠标点击文本框自动选中内容的方法
Aug 20 Javascript
jquery实现一个全局计时器(商城可用)
Jun 30 jQuery
Angularjs自定义指令实现分页插件(DEMO)
Sep 16 Javascript
JavaScript中Require调用js的实例分享
Oct 27 Javascript
mint-ui 时间插件使用及获取选择值的方法
Feb 09 Javascript
在vue中把含有html标签转为html渲染页面的实例
Oct 28 Javascript
vue-cli4.5.x快速搭建项目
May 30 Vue.js
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
Apache设置虚拟WEB
2006/10/09 PHP
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
2013/06/05 PHP
一个图片地址分解程序(用于PHP小偷程序)
2014/08/23 PHP
PHP+Ajax实现的检测用户名功能简单示例
2019/02/12 PHP
Js注册协议倒计时的小例子
2013/06/24 Javascript
图标线性回归斜着移动到指定的位置
2013/08/16 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
jQuery使用之标记元素属性用法实例
2015/01/19 Javascript
jQuery操作Table技巧大汇总
2016/01/23 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
基于JS实现横线提示输入验证码随验证码输入消失(js验证码的实现)
2016/10/27 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
vue实现app页面切换动画效果实例
2017/05/23 Javascript
Vue.js弹出模态框组件开发的示例代码
2017/07/26 Javascript
深入理解requireJS-实现一个简单的模块加载器
2018/01/15 Javascript
Vue底层实现原理总结
2018/02/17 Javascript
vue.js单文件组件中非父子组件的传值实例
2018/09/13 Javascript
koa源码中promise的解读
2018/11/13 Javascript
node.js微信小程序配置消息推送的实现
2019/02/13 Javascript
jquery.pager.js分页实现详解
2019/07/29 jQuery
VUE中setTimeout和setInterval自动销毁案例
2020/09/07 Javascript
python三元运算符实现方法
2013/12/17 Python
python如何重载模块实例解析
2018/01/25 Python
对python-3-print重定向输出的几种方法总结
2018/05/11 Python
Python 计算任意两向量之间的夹角方法
2019/07/05 Python
详解python中groupby函数通俗易懂
2020/05/14 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
保送生自荐信范文
2013/10/06 职场文书
2014年消防工作实施方案
2014/02/20 职场文书
模特职业生涯规划范文
2014/02/26 职场文书
机关工会开展学习雷锋活动总结
2014/03/01 职场文书
办公自动化毕业生求职信
2014/03/09 职场文书
2014年银行信贷员工作总结
2014/12/08 职场文书
2020优秀员工演讲稿(三篇)
2019/10/17 职场文书
红灯733-1型14管5波段半导体收音机
2021/04/22 无线电
教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤
2021/09/25 Servers