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 相关文章推荐
Jquery Ajax.ashx 高效分页实现代码
Oct 20 Javascript
jQuery插件 tabBox实现代码
Feb 09 Javascript
整理8个很棒的 jQuery 倒计时插件和教程
Dec 12 Javascript
js 文本滚动效果的实例代码
Aug 17 Javascript
jquery实现的美女拼图游戏实例
May 04 Javascript
JavaScript程序设计之JS调试
Dec 09 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
Aug 05 Javascript
Three.js的使用及绘制基础3D图形详解
Apr 27 Javascript
详解在React里使用&quot;Vuex&quot;
Apr 02 Javascript
vue使用微信扫一扫功能的实现代码
Apr 11 Javascript
Element图表初始大小及窗口自适应实现
Jul 10 Javascript
js正则匹配markdown里的图片标签的实现
Mar 24 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 str_pad() 将字符串填充成指定长度的字符串
2010/02/23 PHP
10条PHP高级技巧[修正版]
2011/08/02 PHP
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
php字符串的替换,分割和连接方法
2016/05/23 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
2019/04/09 PHP
我也种棵OO树JXTree[js+css+xml]
2007/04/02 Javascript
IE浏览器兼容Firefox的JS脚本的代码
2008/10/23 Javascript
jquery 入门教程 [翻译] 推荐
2009/08/17 Javascript
asp.net下利用js实现返回上一页的实现方法小集
2009/11/24 Javascript
JavaScript 以对象为索引的关联数组
2010/05/19 Javascript
javascript中创建对象的三种常用方法
2010/12/30 Javascript
JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性
2012/10/11 Javascript
11种ASP连接数据库的方法
2015/09/18 Javascript
js select实现省市区联动选择
2020/04/17 Javascript
vue从使用到源码实现教程详解
2016/09/19 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
AngularJS Select(选择框)使用详解
2017/01/18 Javascript
详解Weex基于Vue2.0开发模板搭建
2017/03/20 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
详谈JS中数组的迭代方法和归并方法
2017/08/11 Javascript
在vue中阻止浏览器后退的实例
2019/11/06 Javascript
在pycharm中开发vue的方法步骤
2020/03/04 Javascript
Openlayers实现距离面积测量
2020/09/28 Javascript
浅谈Python 集合(set)类型的操作——并交差
2016/06/30 Python
Python用 KNN 进行验证码识别的实现方法
2018/02/06 Python
东南亚旅游平台:The Trip Guru
2018/01/01 全球购物
中国包裹转运寄送国际服务:Famiboat
2019/07/24 全球购物
金讯Java笔试题目
2013/06/18 面试题
机关工会开展学习雷锋活动总结
2014/03/01 职场文书
战略合作协议书范本
2014/04/18 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
护士个人总结范文
2015/02/13 职场文书
铁人观后感
2015/06/16 职场文书
《将心比心》教学反思
2016/02/23 职场文书
JavaScript canvas实现流星特效
2021/05/20 Javascript
HTML怎么设置下划线?html文字加下划线方法
2021/12/06 HTML / CSS