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实例代码
Nov 03 Javascript
JavaScript 继承使用分析
May 12 Javascript
namespace.js Javascript的命名空间库
Oct 11 Javascript
SOSO地图API使用(一)在地图上画圆实现思路与代码
Jan 15 Javascript
事件冒泡是什么如何用jquery阻止事件冒泡
Mar 20 Javascript
设置checkbox为只读(readOnly)的两种方式
Oct 11 Javascript
JS复制到剪贴板示例代码
Oct 30 Javascript
Jquery实现控件的隐藏和显示实例
Feb 08 Javascript
JS限制文本框只能输入数字和字母方法
Feb 28 Javascript
js友好的时间返回函数
Aug 24 Javascript
javascript ES6中箭头函数注意细节小结
Feb 17 Javascript
详解Angular中实现自定义组件的双向绑定的两种方法
Nov 23 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数据类型的总结分析
2013/06/13 PHP
非常实用的php验证码类
2016/05/15 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
用JavaScript脚本实现Web页面信息交互
2006/12/21 Javascript
提交表单时执行func方法实现代码
2013/03/17 Javascript
js获取指定日期周数以及星期几的小例子
2014/06/27 Javascript
Javascript中的arguments与重载介绍
2015/03/15 Javascript
Jquery结合HTML5实现文件上传
2015/06/25 Javascript
JavaScript的设计模式经典之代理模式
2016/02/24 Javascript
Nodejs如何复制文件
2016/03/09 NodeJs
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
js鼠标跟随运动效果
2017/03/11 Javascript
微信小程序五星评分效果实现代码
2017/04/06 Javascript
JS 组件系列之 bootstrap treegrid 组件封装过程
2017/04/28 Javascript
js微信应用场景之微信音乐相册案例分享
2017/08/11 Javascript
JS异步执行结果获取的3种解决方式
2019/02/19 Javascript
详解vue为什么要求组件模板只能有一个根元素
2019/07/22 Javascript
[00:15]TI9观赛名额抽取
2019/07/10 DOTA
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
python去掉 unicode 字符串前面的u方法
2018/10/21 Python
新年快乐! python实现绚烂的烟花绽放效果
2019/01/30 Python
对Python定时任务的启动和停止方法详解
2019/02/19 Python
浅谈Python大神都是这样处理XML文件的
2019/05/31 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
解析Python 偏函数用法全方位实现
2020/06/26 Python
keras实现VGG16方式(预测一张图片)
2020/07/07 Python
详解使用CSS3的@media来编写响应式的页面
2017/11/01 HTML / CSS
CSS3 box-shadow属性实例详解
2020/06/19 HTML / CSS
中粮集团旗下食品网上购物网站:我买网
2016/09/22 全球购物
南京某软件公司的.net面试题
2015/11/30 面试题
2013英文求职信模板范文
2013/11/15 职场文书
英文简历中的自荐信范文
2013/12/14 职场文书
在校证明模板
2015/06/17 职场文书
Python还能这么玩之用Python做个小游戏的外挂
2021/06/04 Python
HttpClient实现文件上传功能
2022/08/14 Java/Android