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 相关文章推荐
如何做到打开一个页面,过几分钟自动转到另一页面
Apr 20 Javascript
JavaScrip实现PHP print_r的数功能(三种方法)
Nov 12 Javascript
javascript快速排序算法详解
Sep 17 Javascript
javascript中attachEvent用法实例分析
May 14 Javascript
JavaScript实现in-place思想的快速排序方法
Aug 07 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
Sep 19 Javascript
angular之ng-template模板加载
Nov 09 Javascript
使用vue中的v-for遍历二维数组的方法
Mar 07 Javascript
js使用ajax传值给后台,后台返回字符串处理方法
Aug 08 Javascript
layui 对弹窗 form表单赋值的实现方法
Sep 04 Javascript
详解node.js 事件循环
Jul 22 Javascript
Vue深入理解插槽slot的使用
Aug 05 Vue.js
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
在smarty模板中使用PHP函数的方法
2011/04/23 PHP
PHP实现ftp上传文件示例
2014/08/21 PHP
php多重接口的实现方法
2015/06/20 PHP
阻止JavaScript事件冒泡传递(cancelBubble 、stopPropagation)
2007/05/08 Javascript
一段批量给页面上的控件赋值js
2010/06/19 Javascript
JavaScript中__proto__与prototype的关系深入理解
2012/12/04 Javascript
js中typeof的用法汇总
2013/12/12 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
js用拖动滑块来控制图片大小的方法
2015/02/27 Javascript
js小数运算出现多位小数如何解决
2015/10/08 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
使用jQuery操作HTML的table表格的实例解析
2016/03/13 Javascript
基于JS实现弹出一个隐藏的div窗口body页面变成灰色并且不可被编辑
2016/12/14 Javascript
jQuery实现select模糊查询(反射机制)
2017/01/14 Javascript
vue.js 中使用(...)运算符报错的解决方法
2018/08/09 Javascript
express express-session的使用小结
2018/12/12 Javascript
微信小程序自定义头部导航栏和导航栏背景图片 navigationStyle问题
2019/07/26 Javascript
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
vue实现浏览器全屏展示功能
2019/11/27 Javascript
在Vue中创建可重用的 Transition的方法
2020/06/02 Javascript
VUE页面中通过双击实现复制表格中内容的示例代码
2020/06/11 Javascript
uni-app实现获取验证码倒计时功能
2020/11/01 Javascript
[05:39]2014DOTA2西雅图国际邀请赛 淘汰赛7月14日TOPPLAY
2014/07/14 DOTA
Python字符串详细介绍
2015/05/09 Python
Python中is与==判断的区别
2017/03/28 Python
Python内置函数—vars的具体使用方法
2017/12/04 Python
python3实现网络爬虫之BeautifulSoup使用详解
2018/12/19 Python
python中bs4.BeautifulSoup的基本用法
2019/07/27 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
澳大利亚领先的武术用品和健身器材供应商:SMAI
2019/03/24 全球购物
Java中的类包括什么内容?设计时要注意哪些方面
2012/05/23 面试题
服装店营销方案
2014/03/10 职场文书
教导主任竞聘演讲稿
2014/05/16 职场文书
音乐教师求职信
2014/06/28 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
JS中forEach()、map()、every()、some()和filter()的用法
2022/05/11 Javascript