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 相关文章推荐
js word表格动态添加代码
Jun 07 Javascript
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
Feb 03 Javascript
JavaScript对象创建及继承原理实例解剖
Feb 28 Javascript
jQuery学习之prop和attr的区别示例介绍
Nov 15 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
Jul 29 Javascript
创建、调用JavaScript对象的方法集锦
Dec 24 Javascript
jQuery使用after()方法在元素后面添加多项内容的方法
Mar 26 Javascript
JavaScript实现带标题的图片轮播特效
May 20 Javascript
javascript 继承学习心得总结
Mar 17 Javascript
详解vue父子模版嵌套案例
Mar 04 Javascript
微信小程序实现锚点定位楼层跳跃的实例
May 18 Javascript
vue改变循环遍历后的数据实例
Nov 07 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
虫族 Zerg 历史背景
2020/03/14 星际争霸
Yii中实现处理前后台登录的新方法
2015/12/28 PHP
PHP 中常量的知识整理
2017/04/14 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
2017/06/11 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
2018/03/30 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
Jquery CheckBox全选方法代码附js checkbox全选反选代码
2010/06/09 Javascript
jQuery控制元素显示、隐藏、切换、滑动的方法总结
2015/04/16 Javascript
12种JavaScript常用的MVC框架比较分析
2015/11/16 Javascript
实用又漂亮的BootstrapValidator表单验证插件
2016/05/30 Javascript
JavaScript制作简单分页插件
2016/09/11 Javascript
JS调用打印机功能简单示例
2016/11/28 Javascript
Angular.js跨controller实现参数传递的两种方法
2017/02/20 Javascript
[js高手之路]设计模式系列课程-发布者,订阅者重构购物车的实例
2017/08/29 Javascript
Vue异步加载about组件
2017/10/31 Javascript
详解webpack多页面配置记录
2018/01/22 Javascript
jquery+php后台实现省市区联动功能示例
2019/05/23 jQuery
原生js实现文件上传、下载、封装等实例方法
2020/01/05 Javascript
vue props default Array或是Object的正确写法说明
2020/07/30 Javascript
[03:59]5分钟带你了解什么是DOTA2(第二期)
2017/02/07 DOTA
[42:23]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第二场 12.10
2020/12/13 DOTA
python排序函数sort()与sorted()的区别
2018/09/18 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
美国学校校服,儿童和婴儿服装:Cookie’s Kids
2016/10/14 全球购物
韩国11街:11STREET
2018/03/27 全球购物
英国领先的体验日提供商:Buyagift
2019/04/19 全球购物
党校自我鉴定范文
2013/10/02 职场文书
学校采购员岗位职责
2014/01/02 职场文书
结婚邀请函范文
2014/01/14 职场文书
小学教研工作制度
2014/01/15 职场文书
建筑工地门卫岗位职责
2014/04/30 职场文书
个人收入证明模板
2014/09/18 职场文书
2015年政府采购工作总结
2015/05/21 职场文书
海底两万里读书笔记
2015/06/26 职场文书
手术室消毒隔离制度
2015/08/05 职场文书
诗词赏析-(浣溪沙)
2019/08/13 职场文书