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 相关文章推荐
javascript入门基础之私有变量
Feb 23 Javascript
js控制不同的时间段显示不同的css样式的实例代码
Nov 04 Javascript
javascript 回调函数详解
Nov 11 Javascript
javascript等号运算符使用详解
Apr 16 Javascript
AngularJS中一般函数参数传递用法分析
Nov 22 Javascript
原生和jQuery的ajax用法详解
Jan 23 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
Apr 05 Javascript
js和jquery中获取非行间样式
May 05 jQuery
vue ssr 指南详读
Jun 29 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
Jul 06 Javascript
解决vue组件props传值对象获取不到的问题
Jun 06 Javascript
extjs4图表绘制之折线图实现方法分析
Mar 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支持页面回退的两种方法
2008/01/10 PHP
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
2013/08/10 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
2014/11/07 PHP
php实现的通用图片处理类
2015/03/24 PHP
JS array 数组详解
2009/03/22 Javascript
javascript 检测浏览器类型和版本的代码
2009/09/15 Javascript
javascript 事件绑定问题
2011/01/01 Javascript
jQuery把表单元素变为json对象
2013/11/06 Javascript
浅谈JavaScript函数节流
2014/12/09 Javascript
NodeJS制作爬虫全过程(续)
2014/12/22 NodeJs
jQuery实现验证年龄简单思路
2016/02/24 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
解决IE7中使用jQuery动态操作name问题
2017/08/28 jQuery
利用Node.js检测端口是否被占用的方法
2017/12/07 Javascript
JavaScript模块详解
2017/12/18 Javascript
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
vue移动端实现红包雨效果
2020/06/23 Javascript
vue-cli 3.x 修改dist路径的方法
2018/09/19 Javascript
express express-session的使用小结
2018/12/12 Javascript
vuex state中的数组变化监听实例
2019/11/06 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
JavaScript实现滑块验证解锁
2021/01/07 Javascript
python脚本实现查找webshell的方法
2014/07/31 Python
python人人网登录应用实例
2014/09/26 Python
python根据文件大小打log日志
2014/10/09 Python
插入排序_Python与PHP的实现版(推荐)
2017/05/11 Python
Python Pexpect库的简单使用方法
2019/01/29 Python
pycharm new project变成灰色的解决方法
2019/06/27 Python
python反转列表的三种方式解析
2019/11/08 Python
django中嵌套的try-except实例
2020/05/21 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
Python利用socket模块开发简单的端口扫描工具的实现
2021/01/27 Python
为什么如下的代码int a=100,b=100;long int c=a * b;不能工作
2013/11/29 面试题
大学生个人总结的自我评价
2013/10/05 职场文书
团日活动总结范文
2014/04/25 职场文书
高中学生自我评价范文
2014/09/23 职场文书