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 相关文章推荐
使用jQuery操作Cookies的实现代码
Oct 09 Javascript
JS操作数据库的实例代码
Oct 17 Javascript
文本框文本自动补全效果示例分享
Jan 19 Javascript
Iframe 自动适应页面的高度示例代码
Feb 26 Javascript
详解maxlength属性在textarea里奇怪的表现
Dec 27 Javascript
基于jQuery实现表格的排序
Dec 02 Javascript
微信小程序 小程序制作及动画(animation样式)详解
Jan 06 Javascript
微信小程序图片宽100%显示并且不变形
Jun 21 Javascript
js序列化和反序列化的使用讲解
Jan 19 Javascript
微信小程序组件传值图示过程详解
Jul 31 Javascript
简述ES6新增关键字let与var的区别
Aug 23 Javascript
es6函数name属性功能与用法实例分析
Apr 18 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
php中的数组操作函数整理
2008/08/18 PHP
PHP的一个完美GIF等比缩放类,附带去除缩放黑背景
2014/04/01 PHP
PHP连接MySQL数据的操作要点
2015/03/20 PHP
php中使用base HTTP验证的方法
2015/04/20 PHP
PHP几个实用自定义函数小结
2016/01/25 PHP
PHP输出Excel PHPExcel的方法
2018/07/26 PHP
php 中self,this的区别和操作方法实例分析
2019/11/04 PHP
如何实现浏览器上的右键菜单
2006/07/10 Javascript
jquery 中多条件选择器,相对选择器,层次选择器的区别
2012/07/03 Javascript
文字不间断滚动(上下左右)实例代码
2013/04/21 Javascript
使用jQuery重置(reset)表单的方法
2014/05/05 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
2015/08/21 Javascript
延时加载JavaScript代码提高速度
2015/12/27 Javascript
详解js中class的多种函数封装方法
2016/01/03 Javascript
jQuery表单元素选择器代码实例
2017/02/06 Javascript
详解react-webpack2-热模块替换[HMR]
2017/08/03 Javascript
Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)
2018/05/10 Javascript
JavaScript页面加载事件实例讲解
2019/09/01 Javascript
[03:09]显微镜下的DOTA2第一期——带你走进华丽的DOTA2世界
2014/06/20 DOTA
[58:32]EG vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[01:08:48]LGD vs OG 2018国际邀请赛淘汰赛BO3 第三场 8.25
2018/08/29 DOTA
Python fileinput模块使用实例
2015/05/28 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
2018/08/04 Python
通过python实现弹窗广告拦截过程详解
2019/07/10 Python
python plotly绘制直方图实例详解
2019/07/22 Python
详解Python中namedtuple的使用
2020/04/27 Python
python 如何使用find和find_all爬虫、找文本的实现
2020/10/16 Python
HTML5 CSS3实现一个精美VCD包装盒个性幻灯片案例
2014/06/16 HTML / CSS
W Hamond官网:始于1979年的钻石专家
2020/07/20 全球购物
几个判断型的面试题
2012/07/03 面试题
怎样有效的进行自我评价
2013/10/06 职场文书
高中打架检讨书
2014/02/13 职场文书
党员教师自我剖析材料
2014/09/29 职场文书
党的群众路线教育实践活动查摆剖析材料
2014/10/10 职场文书
时尚女魔头观后感
2015/06/04 职场文书
使用Ajax实现进度条的绘制
2022/04/07 Javascript