javascript数组去重方法汇总


Posted in Javascript onApril 23, 2015

javascript数组去重方法汇总

Array.prototype.unique1 = function () {
 var n = []; //一个新的临时数组
 for (var i = 0; i < this.length; i++) //遍历当前数组
 {
  //如果当前数组的第i已经保存进了临时数组,那么跳过,
  //否则把当前项push到临时数组里面
  if (n.indexOf(this[i]) == -1) n.push(this[i]);
 }
 return n;
};
Array.prototype.unique2 = function()
{
  var n = {},r=[]; //n为hash表,r为临时数组
  for(var i = 0; i < this.length; i++) //遍历当前数组
  {
    if (!n[this[i]]) //如果hash表中没有当前项
    {
      n[this[i]] = true; //存入hash表
      r.push(this[i]); //把当前数组的当前项push到临时数组里面
    }
  }
  return r;
};
Array.prototype.unique3 = function()
{
  var n = [this[0]]; //结果数组
  for(var i = 1; i < this.length; i++) //从第二项开始遍历
  {
    //如果当前数组的第i项在当前数组中第一次出现的位置不是i,
    //那么表示第i项是重复的,忽略掉。否则存入结果数组
    if (this.indexOf(this[i]) == i) n.push(this[i]);
  }
  return n;
};
Array.prototype.unique4 = function()
{
  this.sort();
  var re=[this[0]];
  for(var i = 1; i < this.length; i++)
  {
    if( this[i] !== re[re.length-1])
    {
      re.push(this[i]);
    }
  }
  return re;
};
var arr = [1,2,2,2,3,3,4,5];
console.log(arr.unique1()); // [1, 2, 3, 4, 5]
console.log(arr.unique2()); // [1, 2, 3, 4, 5]
console.log(arr.unique3()); // [1, 2, 3, 4, 5]
console.log(arr.unique4()); // [1, 2, 3, 4, 5]

其中第1种和第3种方法都用到了数组的indexOf方法。此方法的目的是寻找存入参数在数组中第一次出现的位置。很显然,js引擎在实现这个方法的时候会遍历数组直到找到目标为止。所以此函数会浪费掉很多时间。 而第2中方法用的是hash表。把已经出现过的通过下标的形式存入一个object内。下标的引用要比用indexOf搜索数组快的多。

第四种方法的思路是先把数组排序,然后比较相邻的两个值。 排序的时候用的JS原生的sort方法,JS引擎内部应该是用的快速排序吧。 最终测试的结果是此方法运行时间平均是第二种方法的三倍左右,不过比第一种和第三种方法快了不少。

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
2007/12/23更新创意无限,简单实用(javascript log)
Dec 24 Javascript
JavaScript入门学习书籍推荐
Jun 12 Javascript
复制js对象方法(详解)
Jul 08 Javascript
js中同步与异步处理的方法和区别总结
Dec 25 Javascript
js点击出现悬浮窗效果不使用JQuery插件
Jan 20 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
Feb 16 Javascript
JavaScript两个变量交换值的实现方法
Mar 01 Javascript
JS库之Waypoints的用法详解
Sep 13 Javascript
php main 与 iframe 相互通讯类(js+php同域/跨域)
Sep 14 Javascript
vue 实现 rem 布局或vw 布局的方法
Nov 13 Javascript
解决Element中el-date-picker组件不回填的情况
Nov 07 Javascript
JavaScript实现网页留言板功能
Nov 23 Javascript
javascript实现英文首字母大写
Apr 23 #Javascript
原生js和jquery实现图片轮播淡入淡出效果
Apr 23 #Javascript
浅谈javascript中for in 和 for each in的区别
Apr 23 #Javascript
原生js和jquery实现图片轮播特效
Apr 23 #Javascript
使用纯javascript实现经典扫雷游戏
Apr 23 #Javascript
jQuery图片特效插件Revealing实现拉伸放大
Apr 22 #Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
Apr 22 #Javascript
You might like
150kHz到30Mhz完全冲浪手册
2020/03/20 无线电
德生PL660的电路分析和打磨
2021/03/02 无线电
Dedecms V3.1 生成HTML速度的优化办法
2007/03/18 PHP
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
如何重写Laravel异常处理类详解
2020/12/20 PHP
语义化 H1 标签
2008/01/14 Javascript
防止页面被iframe(兼容IE,Firefox火狐)
2010/07/04 Javascript
js封装的textarea操作方法集合(兼容很好)
2010/11/16 Javascript
javascript-简单的日历实现及Date对象语法介绍(附图)
2013/05/30 Javascript
jQuery绑定自定义事件的魔法升级版
2016/06/30 Javascript
NodeJS服务器实现gzip压缩的示例代码
2018/10/12 NodeJs
Node.js EventEmmitter事件监听器用法实例分析
2019/01/07 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
JS中的算法与数据结构之集合(Set)实例详解
2019/08/20 Javascript
微信小程序使用echarts获取数据并生成折线图
2019/10/16 Javascript
node实现mock-plugin中间件的方法
2019/12/25 Javascript
JS实现省市县三级下拉联动
2020/04/10 Javascript
详解Node.JS模块 process
2020/08/31 Javascript
vue实现简单全选和反选功能
2020/09/15 Javascript
python实现媒体播放器功能
2018/02/11 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
python自动化报告的输出用例详解
2018/05/30 Python
python 实时得到cpu和内存的使用情况方法
2018/06/11 Python
python中map的基本用法示例
2018/09/10 Python
利用python实现AR教程
2019/11/20 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
Python用Jira库来操作Jira
2020/12/28 Python
美国一家专业的太阳镜网上零售商:Solstice太阳镜
2016/07/25 全球购物
中层干部岗位职责
2013/12/18 职场文书
护理人员的自我评价分享
2014/03/15 职场文书
幼儿园大班家长评语
2014/04/17 职场文书
南京市纪委监察局整改方案
2014/09/16 职场文书
模范班主任事迹材料
2014/12/17 职场文书
2015年保险业务员工作总结
2015/05/27 职场文书
python字典的元素访问实例详解
2021/07/21 Python
CSS中理解层叠性及权重如何分配
2022/12/24 HTML / CSS