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 创建对象和构造类实现代码
Jul 30 Javascript
正则表达式搭配js轻松处理json文本方便而老古
Feb 17 Javascript
无缝滚动js代码通俗易懂(自写)
Jun 19 Javascript
浅析jQuery1.8的几个小变化
Dec 10 Javascript
JS DOM实现鼠标滑动图片效果
Sep 17 Javascript
Bootstrap栅格系统的使用和理解2
Dec 14 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
Jul 12 Javascript
vue实现微信二次分享以及自定义分享的示例
Mar 20 Javascript
vue-cli3.X快速创建项目的方法步骤
Nov 14 Javascript
element中的$confirm的使用
Apr 26 Javascript
八种Vue组件间通讯方式合集(推荐)
Aug 18 Javascript
node中短信api实现验证码登录的示例代码
Jan 20 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中基于ts与nts版本- vc6和vc9编译版本的区别详解
2013/04/26 PHP
php版微信公众平台之微信网页登陆授权示例
2016/09/23 PHP
php根据数据id自动生成编号的实现方法
2016/10/16 PHP
THINKPHP在添加数据的时候获取主键id的值方法
2017/04/03 PHP
php post json参数的传递和接收处理方法
2018/05/31 PHP
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
jQuery Jcrop插件实现图片选取功能
2011/11/23 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
网站接入QQ登录的两种方法
2014/07/22 Javascript
编写简单的jQuery提示插件
2014/12/21 Javascript
JS判断当前页面是否在微信浏览器打开的方法
2015/12/08 Javascript
JS iFrame加载慢怎么解决
2016/05/13 Javascript
JavaScript编写一个简易购物车功能
2016/09/17 Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
2016/10/11 Javascript
js基于myFocus实现轮播图效果
2017/02/14 Javascript
用element的upload组件实现多图片上传和压缩的示例代码
2019/02/12 Javascript
微信小程序使用字体图标的方法
2019/05/23 Javascript
JS实现给数组对象排序的方法分析
2019/06/24 Javascript
Vue项目开发常见问题和解决方案总结
2020/09/11 Javascript
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
[04:54]DOTA2 2017国际邀请赛:上届冠军WINGS采访短片
2017/08/09 DOTA
python dict.get()和dict['key']的区别详解
2016/06/30 Python
python虚拟环境virtualenv的安装与使用
2017/09/21 Python
利用Python实现在同一网络中的本地文件共享方法
2018/06/04 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
python logging日志模块原理及操作解析
2019/10/12 Python
python如何代码集体右移
2020/07/20 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
日本快乐生活方式购物网站:Shop Japan
2018/07/17 全球购物
道德模范先进事迹
2014/02/14 职场文书
2014全国两会大学生学习心得体会
2014/03/10 职场文书
心理健康日活动总结
2014/05/08 职场文书
揭牌仪式策划方案
2014/05/28 职场文书
安全宣传标语
2014/06/10 职场文书
jquery插件实现搜索历史
2021/04/24 jQuery
用Python仅20行代码编写一个简单的端口扫描器
2022/04/08 Python