全网整合营销服务商

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

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


相关文章: 免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  孙琪峥织梦建站教程如何优化数据库安全?  如何通过虚拟主机快速完成网站搭建?  广东专业制作网站有哪些,广东省能源集团有限公司官网?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  济南网站制作的价格,历城一职专官方网站?  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  如何用y主机助手快速搭建网站?  如何零基础开发自助建站系统?完整教程解析  如何用景安虚拟主机手机版绑定域名建站?  已有域名和空间,如何快速搭建网站?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  制作网站的公司有哪些,做一个公司网站要多少钱?  如何在万网主机上快速搭建网站?  如何用wdcp快速搭建高效网站?  建站之星备案是否影响网站上线时间?  网站制作模板下载什么软件,ppt模板免费下载网站?  微信推文制作网站有哪些,怎么做微信推文,急?  简历在线制作网站免费版,如何创建个人简历?  如何配置IIS站点权限与局域网访问?  如何高效生成建站之星成品网站源码?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  建站之星如何快速生成多端适配网站?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  MySQL查询结果复制到新表的方法(更新、插入)  如何在万网ECS上快速搭建专属网站?  小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建  焦点电影公司作品,电影焦点结局是什么?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  全景视频制作网站有哪些,全景图怎么做成网页?  高端云建站费用究竟需要多少预算?  如何在橙子建站上传落地页?操作指南详解  网页设计与网站制作内容,怎样注册网站?  建站之星3.0如何解决常见操作问题?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  如何快速生成可下载的建站源码工具?  如何撰写建站申请书?关键要点有哪些?  如何确保FTP站点访问权限与数据传输安全?  山东云建站价格为何差异显著?  如何通过cPanel快速搭建网站?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  建站org新手必看:2024最新搭建流程与模板选择技巧  建站之星下载版如何获取与安装?  北京网站制作网页,网站升级改版需要多久?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  内部网站制作流程,如何建立公司内部网站?  宿州网站制作公司兴策,安徽省低保查询网站?  h5在线制作网站电脑版下载,h5网页制作软件?  建站VPS选购需注意哪些关键参数?  如何打造高效商业网站?建站目的决定转化率 

您的项目需求

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