js实现数组去重方法及效率?Ρ? target=


Posted in Javascript onFebruary 14, 2017

其???上搜索?些方法一堆堆的,之所以????一遍主要是因??自己??T一?之後就忘了其他方法怎麽???,就??一????一下,?便做???y?看看哪??效率最高,??了更好展示效果,我??瓤?????比?好的方法,後面?一?y?。(?剀疤崾荆合挛男}是??了?便,一般情?r下不建???在原型上,容易污染全局)

一,通??ふ?ο?傩?/strong>

var n = [14,12,2,2,2,5,32,2,59,5,6,33,12,32,6];
Array.prototype.unique1 = function(){
 var obj = {},
  ary = [],
  i= 0,
  len = this.length;
 for(; i<len; i++){
  if(!obj[this[i]]){
   obj[this[i]] = 1;
   ary.push(this[i]);
  }
 }
 return ary.sort(function(a,b){return a - b});
}
console.log(n.unique1());

二,通??ふ?到M位置

var n = [14,12,2,2,2,5,32,2,59,5,6,33,12,32,6];
Array.prototype.unique2 = function(){
 var ary = [],
  i= 0,
  len = this.length;
 for(; i<len; i++){
  if(ary.indexOf(this[i]) == -1) ary.push(this[i]);
 }
 return ary.sort(function(a,b){return a - b});
}
console.log(n.unique2());

三,跟?ふ?到M位置?似,搜索?底值谝淮纬霈F的位置是不是跟?前位置一??/strong>

var n = [14,12,2,2,2,5,32,2,59,5,6,33,12,32,6];
Array.prototype.unique3 = function(){
 var ary = [],
  i= 0,
  len = this.length;
 for(; i<len; i++){
  if(this.indexOf(this[i]) == i) ary.push(this[i]);
 }
 return ary.sort(function(a,b){return a - b});
}
console.log(n.unique3());

四,比?常?,先排序,再比?前後????底质遣皇窍嗟?/strong>

var n = [14,12,2,2,2,5,32,2,59,5,6,33,12,32,6];
Array.prototype.unique4 = function(){
 this.sort(function(a,b){return a - b});
 var ary = [],
  i= 0,
  len = this.length;
 for(; i<len; i++){
  if(this[i] !== this[i-1]) ary.push(this[i]);
 }
 return ary;
}
console.log(n.unique4());

接下?硎蔷W上比?少的效率比?了,也是本文重?,我??先生成一????r函?到y一比?

首先生成一??一百?底值?到M

Array.prototype.unique1 = function(){
 var obj = {},
  ary = [],
  i= 0,
  len = this.length;
 for(; i<len; i++){
  if(!obj[this[i]]){
   obj[this[i]] = 1;
   ary.push(this[i]);
  }
 }
 return ary.sort(function(a,b){return a - b});
}
Array.prototype.unique2 = function(){
 var ary = [],
  i= 0,
  len = this.length;
 for(; i<len; i++){
  if(ary.indexOf(this[i]) == -1) ary.push(this[i]);
 }
 return ary.sort(function(a,b){return a - b});
}
Array.prototype.unique3 = function(){
 var ary = [],
  i= 0,
  len = this.length;
 for(; i<len; i++){
  if(this.indexOf(this[i]) == i) ary.push(this[i]);
 }
 return ary.sort(function(a,b){return a - b});
}
Array.prototype.unique4 = function(){
 this.sort(function(a,b){return a - b});
 var ary = [],
  i= 0,
  len = this.length;
 for(; i<len; i++){
  if(this[i] !== this[i-1]) ary.push(this[i]);
 }
 return ary;
}
function randomAry (n) {
 var ary = [],i=0;
 for(; i<n; i++){
  ary.push(Math.ceil(Math.random()*10000));
 }
  console.log(ary)
 return ary;
}
function useTime (fn) {
 var start = new Date();
 fn();
 var end = new Date();
 console.log('本次函?颠\行花了:' + (end - start) + '毫秒');
}
var ary = randomAry(100),
 fn1 = function(){
 ary.unique1()
 },
 fn2 = function(){
 ary.unique2()
 },
 fn3 = function(){
 ary.unique3()
 },
 fn4 = function(){
 ary.unique4()
 };
useTime(fn1);
useTime(fn2);
useTime(fn3);
useTime(fn4);

?果在我的谷歌?g?器??

方法一:0毫秒

方法二:1毫秒

方法三:0毫秒

方法四:00毫秒

(嗯,果然?代?g?器强大?o比,不吐槽??g?器了)

看看1000???底?/p>

Array.prototype.unique1 = function(){
 var obj = {},
  ary = [],
  i= 0,
  len = this.length;
 for(; i<len; i++){
  if(!obj[this[i]]){
   obj[this[i]] = 1;
   ary.push(this[i]);
  }
 }
 return ary.sort(function(a,b){return a - b});
}
Array.prototype.unique2 = function(){
 var ary = [],
  i= 0,
  len = this.length;
 for(; i<len; i++){
  if(ary.indexOf(this[i]) == -1) ary.push(this[i]);
 }
 return ary.sort(function(a,b){return a - b});
}
Array.prototype.unique3 = function(){
 var ary = [],
  i= 0,
  len = this.length;
 for(; i<len; i++){
  if(this.indexOf(this[i]) == i) ary.push(this[i]);
 }
 return ary.sort(function(a,b){return a - b});
}
Array.prototype.unique4 = function(){
 this.sort(function(a,b){return a - b});
 var ary = [],
  i= 0,
  len = this.length;
 for(; i<len; i++){
  if(this[i] !== this[i-1]) ary.push(this[i]);
 }
 return ary;
}
function randomAry (n) {
 var ary = [],i=0;
 for(; i<n; i++){
  ary.push(Math.ceil(Math.random()*10000));
 }
  console.log(ary)
 return ary;
}
function useTime (fn) {
 var start = new Date();
 fn();
 var end = new Date();
 console.log('本次函?颠\行花了:' + (end - start) + '毫秒');
}
var ary = randomAry(1000),
 fn1 = function(){
 ary.unique1()
 },
 fn2 = function(){
 ary.unique2()
 },
 fn3 = function(){
 ary.unique3()
 },
 fn4 = function(){
 ary.unique4()
 };
useTime(fn1);
useTime(fn2);
useTime(fn3);
useTime(fn4);
方法一:1-2毫秒
方法二:40-50毫秒
方法三:40-50毫秒
方法四:0-1毫秒
看看10000???底郑????大,?始吃不消了,等??五六秒吧)
Array.prototype.unique1 = function(){
 var obj = {},
  ary = [],
  i= 0,
  len = this.length;
 for(; i<len; i++){
  if(!obj[this[i]]){
   obj[this[i]] = 1;
   ary.push(this[i]);
  }
 }
 return ary.sort(function(a,b){return a - b});
}
Array.prototype.unique2 = function(){
 var ary = [],
  i= 0,
  len = this.length;
 for(; i<len; i++){
  if(ary.indexOf(this[i]) == -1) ary.push(this[i]);
 }
 return ary.sort(function(a,b){return a - b});
}
Array.prototype.unique3 = function(){
 var ary = [],
  i= 0,
  len = this.length;
 for(; i<len; i++){
  if(this.indexOf(this[i]) == i) ary.push(this[i]);
 }
 return ary.sort(function(a,b){return a - b});
}
Array.prototype.unique4 = function(){
 this.sort(function(a,b){return a - b});
 var ary = [],
  i= 0,
  len = this.length;
 for(; i<len; i++){
  if(this[i] !== this[i-1]) ary.push(this[i]);
 }
 return ary;
}
function randomAry (n) {
 var ary = [],i=0;
 for(; i<n; i++){
  ary.push(Math.ceil(Math.random()*10000));
 }
  console.log(ary)
 return ary;
}
function useTime (fn) {
 var start = new Date();
 fn();
 var end = new Date();
 console.log('本次函?颠\行花了:' + (end - start) + '毫秒');
}
var ary = randomAry(10000),
 fn1 = function(){
 ary.unique1()
 },
 fn2 = function(){
 ary.unique2()
 },
 fn3 = function(){
 ary.unique3()
 },
 fn4 = function(){
 ary.unique4()
 };
useTime(fn1);
useTime(fn2);
useTime(fn3);
useTime(fn4);

因??????大,我?拿一次??????喜?g就刷新?状伪容^?h

方法一:10毫秒

方法二:1258毫秒

方法三:2972毫秒

方法四:5毫秒

原本?想?更大的???纯矗?会崾?f??我的?面就奔?⒘恕!!?⒘恕!!A?/p>

然後??五???,也奔?⒘恕!!?⒘恕!!A?/p>

那就算吧,

反正在一??????Y面?Ρ龋???酱螅?椒ㄒ桓?椒ㄋ陌春撩脒f增,方法二跟方法三效率感人

效率?算:4>1>2>3

方法?算: 先排序,再比?前後????底质遣皇窍嗟 > 通??ふ?ο?傩 > 通??ふ?到M位置 > 搜索?底值谝淮纬霈F的位置是不是跟?前位置一??/p>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
JSF中confirm弹出框的用法示例介绍
Jan 07 Javascript
jQuery 计算iframe 窗口大小的方法
May 13 Javascript
根据配置文件加载js依赖模块
Dec 29 Javascript
jQuery实现带动画效果的二级下拉导航方法
Mar 11 Javascript
jQuery实现径向动画菜单效果
Jul 17 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
Mar 09 Javascript
整理关于Bootstrap表单的慕课笔记
Mar 29 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
Apr 21 jQuery
Vue中引入样式文件的方法
Aug 18 Javascript
npm全局模块卸载及默认安装目录修改方法
May 15 Javascript
Vue 中axios配置实例详解
Jul 27 Javascript
Js参数RSA加密传输之jsencrypt.js的使用
Feb 07 Javascript
jQuery实现Table表格隔行变色及高亮显示当前选择行效果示例
Feb 14 #Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
May 29 #Javascript
Bootstrap中data-target 到底是什么
Feb 14 #Javascript
详解JS: reduce方法实现 webpack多文件入口
Feb 14 #Javascript
如何快速上手Vuex
Feb 14 #Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
Feb 14 #Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
Feb 14 #Javascript
You might like
php数据库备份还原类分享
2014/03/20 PHP
php短址转换实现方法
2015/02/25 PHP
在Javascript中为String对象添加trim,ltrim,rtrim方法
2006/09/22 Javascript
User Scripts: Video Download by User Scripts
2007/05/14 Javascript
JavaScript函数、方法、对象代码
2008/10/29 Javascript
精通JavaScript 纠正 cleanWhitespace函数
2010/03/11 Javascript
jquery多浏览器捕捉回车事件代码
2010/06/22 Javascript
jQuery的.live()和.die() 使用介绍
2011/09/10 Javascript
通过一段代码简单说js中的this的使用
2013/07/23 Javascript
JS实现漂亮的淡蓝色滑动门效果代码
2015/09/23 Javascript
JS 根据子网掩码,网关计算出所有IP地址范围示例
2020/04/23 Javascript
从零开始学习Node.js系列教程六:EventEmitter发送和接收事件的方法示例
2017/04/13 Javascript
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
Vue弹出菜单功能的实现代码
2018/09/12 Javascript
vue实现的下拉框功能示例
2019/01/29 Javascript
jQuery控制input只能输入数字和两位小数的方法
2019/05/16 jQuery
layui 上传文件_批量导入数据UI的方法
2019/09/23 Javascript
JavaScript实现简单进度条效果
2020/03/25 Javascript
vue使用axios实现excel文件下载的功能
2020/07/16 Javascript
初探TensorFLow从文件读取图片的四种方式
2018/02/06 Python
对python .txt文件读取及数据处理方法总结
2018/04/23 Python
Django组件cookie与session的具体使用
2019/06/05 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
Django 大文件下载实现过程解析
2019/08/01 Python
Python while true实现爬虫定时任务
2020/06/08 Python
NFL墨西哥官方商店:Tienda NFL
2017/11/28 全球购物
伦敦高达60%折扣的钻石珠宝商:Purely Diamonds
2018/06/24 全球购物
英国最大的滑板品牌选择:Route One
2019/09/22 全球购物
JDK安装目录下有哪些内容
2014/08/25 面试题
国家助学金获奖感言
2014/01/31 职场文书
《蒲公英》教学反思
2014/02/28 职场文书
2014乡镇“三八”国际劳动妇女节活动总结
2014/03/01 职场文书
责任胜于能力演讲稿
2014/05/20 职场文书
运动会入场词
2015/07/18 职场文书
带你了解Java中的ForkJoin
2022/04/28 Java/Android
python通过新建环境安装tfx的问题
2022/05/20 Python