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 相关文章推荐
一个判断email合法性的函数[非正则]
Dec 09 Javascript
autoIMG 基于jquery的图片自适应插件代码
Mar 12 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
Sep 26 Javascript
js+jquery常用知识点汇总
Mar 03 Javascript
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
Sep 15 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
Oct 10 Javascript
jquery ajaxfileupload异步上传插件使用详解
Feb 08 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
Aug 16 Javascript
浅谈vue中数据双向绑定的实现原理
Sep 14 Javascript
vue init失败简单解决方法(终极版)
Dec 22 Javascript
浅析webpack-bundle-analyzer在vue-cli3中的使用
Oct 23 Javascript
前端开发基础javaScript的六大作用
Aug 06 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高级OOP技术演示
2009/08/27 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
CI框架装载器Loader.php源码分析
2014/11/04 PHP
php实现检查文章是否被百度收录
2015/01/27 PHP
PHP实现的简单网络硬盘
2015/07/29 PHP
PHP中trait使用方法详细介绍
2017/05/21 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
2019/10/21 PHP
纯js写的分页表格数据为json串
2014/02/18 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
jQuery获取DOM节点实例分析(2种方式)
2015/12/15 Javascript
JS刷新父窗口的几种方式小结(推荐)
2016/11/09 Javascript
微信小程序 弹窗自定义实例代码
2017/03/08 Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
2017/11/28 Javascript
微信小程序新手教程之启动页的重要性
2019/03/03 Javascript
jQuery实现的导航条点击后高亮显示功能示例
2019/03/04 jQuery
重学JS之显示强制类型转换详解
2019/06/30 Javascript
node.js实现上传文件功能
2019/07/15 Javascript
ant-design表单处理和常用方法及自定义验证操作
2020/10/27 Javascript
[01:02:10]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第一局
2016/02/26 DOTA
[01:48]完美圣典齐天大圣至宝宣传片
2016/12/17 DOTA
Python语言的12个基础知识点小结
2014/07/10 Python
python使用psutil模块获取系统状态
2016/08/27 Python
Python+Turtle动态绘制一棵树实例分享
2018/01/16 Python
tensorflow 获取模型所有参数总和数量的方法
2018/06/14 Python
基于Python中求和函数sum的用法详解
2018/06/28 Python
python同时替换多个字符串方法示例
2019/09/17 Python
如何基于python实现归一化处理
2020/01/20 Python
python中判断数字是否为质数的实例讲解
2020/12/06 Python
目前不被任何主流浏览器支持的CSS3属性汇总
2014/07/21 HTML / CSS
HTML5 Canvas基本线条绘制的实例教程
2016/03/17 HTML / CSS
计算机专业自荐信
2013/10/14 职场文书
会计自荐信范文
2014/03/09 职场文书
新人入职感言
2015/07/31 职场文书
2016形势与政策学习心得体会
2016/01/12 职场文书
nginx中封禁ip和允许内网ip访问的实现示例
2022/03/17 Servers