全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

js实现数组去重方法及效率對比

其實網上搜索這些方法一堆堆的,之所以還來寫一遍主要是因爲自己習慣一種之後就忘了其他方法怎麽實現,就寫一寫總結一下,順便做個測試看看哪個效率最高,爲了更好展示效果,我會先總結認爲比較好的方法,後面統一測試。(溫馨提示:下文衹是爲了簡便,一般情況下不建議寫在原型上,容易污染全局)

一,通過尋找對象屬性

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());

二,通過尋找數組位置

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());

三,跟尋找數組位置類似,搜索數字第一次出現的位置是不是跟當前位置一樣

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());

四,比較常規,先排序,再比較前後兩個數字是不是相等

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());

接下來是網上比較少的效率比較了,也是本文重點,我們先生成一個計時函數統一比較

首先生成一個一百數字的數組

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);

結果在我的谷歌瀏覽器發現

方法一:0毫秒

方法二:1毫秒

方法三:0毫秒

方法四:00毫秒

(嗯,果然現代瀏覽器强大無比,不吐槽舊瀏覽器了)

看看1000個數字

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);

因爲數據龐大,我衹拿一次數據,你們喜歡就刷新幾次比較唄

方法一:10毫秒

方法二:1258毫秒

方法三:2972毫秒

方法四:5毫秒

原本還想給更大的數據看看,然後十萬個我的頁面就奔潰了。。。潰了。。。了

然後試試五萬個,也奔潰了。。。潰了。。。了

那就算吧,

反正在一萬個數據裏面對比,數據越大,方法一跟方法四按毫秒遞增,方法二跟方法三效率感人

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

方法計算: 先排序,再比較前後兩個數字是不是相等 > 通過尋找對象屬性 > 通過尋找數組位置 > 搜索數字第一次出現的位置是不是跟當前位置一樣

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


# js  # 数组去重  # 如何高效率去掉js数组中的重复项  # JavaScript判断是否为数组的3种方法及效率比较  # JavaScript数组去重的几种方法效率测试  # JS数组在内存中的效率问题浅析  # 花了  # 更大  # 一遍  # 堆堆  # 吃不消  # 越大  # 在一  # 五六  # 主要是  # obj  # ary  # len  # function  # Array  # prototype  # log  # console  # 通過尋找數組  # indexOf  # lt 


相关文章: 浅谈Javascript中的Label语句  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  制作网站的模板软件,网站怎么建设?  如何在香港免费服务器上快速搭建网站?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  实例解析Array和String方法  建站之星CMS五站合一模板配置与SEO优化指南  盘锦网站制作公司,盘锦大洼有多少5G网站?  如何快速辨别茅台真假?关键步骤解析  网站制作难吗安全吗,做一个网站需要多久时间?  家庭建站与云服务器建站,如何选择更优?  如何快速搭建虚拟主机网站?新手必看指南  Thinkphp 中 distinct 的用法解析  赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  如何用好域名打造高点击率的自主建站?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  已有域名如何免费搭建网站?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  如何快速上传建站程序避免常见错误?  购物网站制作公司有哪些,哪个购物网站比较好?  青岛网站建设如何选择本地服务器?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  建站之星后台密码遗忘?如何快速找回?  高防服务器:AI智能防御DDoS攻击与数据安全保障  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  专业公司网站制作公司,用什么语言做企业网站比较好?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  建站之星安装路径如何正确选择及配置?  如何通过远程VPS快速搭建个人网站?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  高防服务器租用如何选择配置与防御等级?  制作电商网页,电商供应链怎么做?  北京网站制作网页,网站升级改版需要多久?  文字头像制作网站推荐软件,醒图能自动配文字吗?  黑客如何通过漏洞一步步攻陷网站服务器?  如何通过NAT技术实现内网高效建站?  高端企业智能建站程序:SEO优化与响应式模板定制开发  佛山网站制作系统,佛山企业变更地址网上办理步骤?  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  免费ppt制作网站,有没有值得推荐的免费PPT网站?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  建站之星后台管理系统如何操作?  如何在企业微信快速生成手机电脑官网?  ,石家庄四十八中学官网?  常州自助建站工具推荐:低成本搭建与模板选择技巧  制作营销网站公司,淘特是干什么用的?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。