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 相关文章推荐
一个JavaScript继承的实现
Oct 24 Javascript
利用JQuery为搜索栏增加tag提示
Jun 22 Javascript
js constructor的实际作用分析
Nov 15 Javascript
javascript中比较字符串是否相等的方法
Jul 23 Javascript
JS实现的简洁二级导航菜单雏形效果
Oct 13 Javascript
js实现图片淡入淡出切换简易效果
Aug 22 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
Mar 08 Javascript
react native 文字轮播的实现示例
Jul 27 Javascript
Vue CLI3基础学习之pages构建多页应用
Jun 02 Javascript
解决vue单页面修改样式无法覆盖问题
Aug 05 Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
Dec 07 Javascript
微信小程序8种数据通信的方式小结
Feb 03 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提取视频网站页面中的FLASH地址的代码
2010/04/17 PHP
coreseek 搜索英文的问题详解
2013/06/08 PHP
PHP文件锁函数flock()详细介绍
2014/11/18 PHP
PHP中JSON的应用技巧
2015/10/10 PHP
php多线程并发实现方法
2016/09/30 PHP
php 调用ffmpeg获取视频信息的简单实现
2017/04/03 PHP
PHP实现动态添加XML中数据的方法
2018/03/30 PHP
JavaScript使用cookie
2007/02/02 Javascript
Track Image Loading效果代码分析
2007/08/13 Javascript
关于js拖拽上传 [一个拖拽上传修改头像的流程]
2011/07/13 Javascript
js实现无限级树形导航列表效果代码
2015/09/23 Javascript
js中利用tagname和id获取元素的方法
2016/01/03 Javascript
js实现文字滚动效果
2016/03/03 Javascript
Bootstrap的Refresh Icon也spin起来
2016/07/13 Javascript
微信小程序中显示html格式内容的方法
2017/04/25 Javascript
微信小程序开发之toast等弹框提示使用教程
2017/06/08 Javascript
深入理解vue.js中$watch的oldvalue与newValue
2017/08/07 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
详解微信小程序之scroll-view的flex布局问题
2019/01/16 Javascript
vue中v-text / v-html使用实例代码详解
2019/04/02 Javascript
如何使用CSS3和JQuery easing 插件制作绚丽菜单
2019/06/18 jQuery
解决Layui数据表格显示无数据提示的问题
2019/11/14 Javascript
[05:05]DOTA2亚洲邀请赛 战队出场仪式
2015/02/07 DOTA
python实现简单的TCP代理服务器
2014/10/08 Python
Python读取ini文件、操作mysql、发送邮件实例
2015/01/01 Python
python实现多线程行情抓取工具的方法
2018/02/28 Python
python距离测量的方法
2018/03/06 Python
详解Python 重学requests发起请求的基本方式
2020/02/07 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
python 实现读取csv数据,分类求和 再写进 csv
2020/05/18 Python
keras实现图像预处理并生成一个generator的案例
2020/06/17 Python
亚洲颇具影响力的男性在线购物零售商:His
2019/11/24 全球购物
临床医学大学生求职信
2013/09/28 职场文书
求职简历中个人的自我评价
2013/12/01 职场文书
会计专业自我评价
2014/02/12 职场文书
Java 超详细讲解数据结构中的堆的应用
2022/04/02 Java/Android