全网整合营销服务商

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

免费咨询热线: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 


相关文章: XML的“混合内容”是什么 怎么用DTD或XSD定义  ,巨量百应是干嘛的?  如何快速生成可下载的建站源码工具?  建站之星北京办公室:智能建站系统与小程序生成方案解析  如何通过FTP服务器快速搭建网站?  C#如何序列化对象为XML XmlSerializer用法  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  个人摄影网站制作流程,摄影爱好者都去什么网站?  如何快速生成专业多端适配建站电话?  如何快速启动建站代理加盟业务?  如何通过宝塔面板实现本地网站访问?  如何选购建站域名与空间?自助平台全解析  定制建站方案优化指南:企业官网开发与建站费用解析  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  如何在阿里云虚拟服务器快速搭建网站?  家具网站制作软件,家具厂怎么跑业务?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  如何在服务器上三步完成建站并提升流量?  网站制作公司排行榜,抖音怎样做个人官方网站  如何在橙子建站中快速调整背景颜色?  如何在IIS中配置站点IP、端口及主机头?  教程网站设计制作软件,怎么创建自己的一个网站?  做企业网站制作流程,企业网站制作基本流程有哪些?  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  教学论文网站制作软件有哪些,写论文用什么软件 ?  如何选择高效响应式自助建站源码系统?  建站之星ASP如何实现CMS高效搭建与安全管理?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  如何通过建站之星自助学习解决操作问题?  如何通过虚拟主机空间快速建站?  如何解决VPS建站LNMP环境配置常见问题?  威客平台建站流程解析:高效搭建教程与设计优化方案  如何选择香港主机高效搭建外贸独立站?  广州美橙建站如何快速搭建多端合一网站?  如何解决ASP生成WAP建站中文乱码问题?  如何选择高性价比服务器搭建个人网站?  建站主机选购指南:核心配置与性价比推荐解析  如何通过老薛主机一键快速建站?  如何规划企业建站流程的关键步骤?  如何在新浪SAE免费搭建个人博客?  公司网站的制作公司,企业网站制作基本流程有哪些?  jQuery 常见小例汇总  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  制作国外网站的软件,国外有哪些比较优质的网站推荐?  如何在IIS管理器中快速创建并配置网站?  建站之星客服服务时间及联系方式如何?  如何快速搭建虚拟主机网站?新手必看指南 

您的项目需求

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