亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Javascript實現(xiàn)數(shù)組去重方法及效率對比

tulayang / 1382人閱讀

摘要:前言其實網(wǎng)上搜索這些方法一堆堆的,之所以還來寫一遍主要是因為自己習(xí)慣一種之后就忘了其他方法怎么實現(xiàn),就寫一寫總結(jié)一下,順便做個測試看看哪個效率最高,為了更好展示效果,我會先總結(jié)認為比較好的方法,后面統(tǒng)一測試。

前言

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

一,通過尋找對象屬性
var ary = [14, 12, 2, 2, 2, 5, 32, 2, 59, 5, 6, 33, 12, 32, 6];
function sortFun1(ary) {
  var obj = {},
    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(sortFun1(ary));
// [ 2, 2, 2, 2, 5, 5, 6, 6, 12, 12, 14, 32, 32, 33, 59 ]
二,通過尋找數(shù)組位置
var ary = [14, 12, 2, 2, 2, 5, 32, 2, 59, 5, 6, 33, 12, 32, 6];
function sortFun2(ary) {
  var 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(sortFun2(ary));
// [ 2, 2, 2, 2, 5, 5, 6, 6, 12, 12, 14, 32, 32, 33, 59 ]
三,跟尋找數(shù)組位置類似,搜索數(shù)字第一次出現(xiàn)的位置是不是跟當(dāng)前位置一樣
var ary = [14, 12, 2, 2, 2, 5, 32, 2, 59, 5, 6, 33, 12, 32, 6];
function sortFun3(ary) {
  var 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(sortFun3(ary));
// [ 2, 2, 2, 2, 5, 5, 6, 6, 12, 12, 14, 32, 32, 33, 59 ]
四,比較常規(guī),先排序,再比較前后兩個數(shù)字是不是相等
var ary = [14, 12, 2, 2, 2, 5, 32, 2, 59, 5, 6, 33, 12, 32, 6];
function sortFun4(ary) {
  ary.sort(function (a, b) {
    return a - b
  });
  var i = 0,
    len = this.length;
  for (; i < len; i++) {
    if (this[i] !== this[i - 1])
      ary.push(this[i]);
  }
  return ary;
}
console.log(sortFun4(ary));
// [ 2, 2, 2, 2, 5, 5, 6, 6, 12, 12, 14, 32, 32, 33, 59 ]

接下來是網(wǎng)上比較少的效率比較了,也是本文重點,我們先生成一個隨機數(shù)組函數(shù)和計時函數(shù)統(tǒng)一比較
(溫馨提示:隨機數(shù)組執(zhí)行一次之后就保存在一個變量,而每次執(zhí)行函數(shù)花費時間都會有幾毫秒偏差,你們想看多幾種結(jié)果就狠狠地按按F5就好了,也只能這么搞..)

首先生成一個一千個數(shù)字的數(shù)組

function sortFun1(ary) {
  var obj = {},
    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
  });
}

function sortFun2(ary) {
  var 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
  });
}


function sortFun3(ary) {
  var 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
  });
}


function sortFun4(ary) {
  ary.sort(function (a, b) {
    return a - b
  });
  var 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));
  }
  return ary;
}

function useTime(fn, ary) {
  var start = new Date();
  fn(ary);
  var end = new Date();
  console.log("本次函數(shù)運行花了:" + (end - start) + "毫秒");
}


var ary = randomAry(1000000);
useTime(sortFun1, ary);
useTime(sortFun2, ary);
useTime(sortFun3, ary);
useTime(sortFun4, ary);

本次函數(shù)運行花了:1毫秒
本次函數(shù)運行花了:1毫秒
本次函數(shù)運行花了:0毫秒
本次函數(shù)運行花了:1毫秒
(嗯,果然現(xiàn)代瀏覽器強大無比,不吐槽舊瀏覽器了)

看看十萬個數(shù)字

function sortFun1(ary) {
  var obj = {},
    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
  });
}

function sortFun2(ary) {
  var 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
  });
}


function sortFun3(ary) {
  var 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
  });
}


function sortFun4(ary) {
  ary.sort(function (a, b) {
    return a - b
  });
  var 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));
  }
  return ary;
}

function useTime(fn, ary) {
  var start = new Date();
  fn(ary);
  var end = new Date();
  console.log("本次函數(shù)運行花了:" + (end - start) + "毫秒");
}


var ary = randomAry(100000);
useTime(sortFun1, ary);
useTime(sortFun2, ary);
useTime(sortFun3, ary);
useTime(sortFun4, ary);

現(xiàn)在開始出現(xiàn)明顯差距了
本次函數(shù)運行花了:65毫秒
本次函數(shù)運行花了:4毫秒
本次函數(shù)運行花了:4毫秒
本次函數(shù)運行花了:5毫秒

看看一百萬個數(shù)字(數(shù)據(jù)龐大,開始吃不消了,等個五六秒吧)

function sortFun1(ary) {
  var obj = {},
    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
  });
}

function sortFun2(ary) {
  var 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
  });
}


function sortFun3(ary) {
  var 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
  });
}


function sortFun4(ary) {
  ary.sort(function (a, b) {
    return a - b
  });
  var 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));
  }
  return ary;
}

function useTime(fn, ary) {
  var start = new Date();
  fn(ary);
  var end = new Date();
  console.log("本次函數(shù)運行花了:" + (end - start) + "毫秒");
}


var ary = randomAry(1000000);
useTime(sortFun1, ary);
useTime(sortFun2, ary);
useTime(sortFun3, ary);
useTime(sortFun4, ary);

本次函數(shù)運行花了:661毫秒
本次函數(shù)運行花了:24毫秒
本次函數(shù)運行花了:20毫秒
本次函數(shù)運行花了:27毫秒

總結(jié)

數(shù)據(jù)說話,

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/106243.html

相關(guān)文章

  • 最全的數(shù)組去重方法對比

    摘要:本文最早發(fā)布于,為原創(chuàng)常規(guī)方法兩種數(shù)組深拷貝,為不了影響原來的數(shù)組第一種方法常用但是有坑碰到這種情況就出問題了第二種方法使用,方法返回的結(jié)果并不一定是升序,主要目的是將重復(fù)的數(shù)字排到一起使用的方法兩種簡潔優(yōu)雅版奇技淫巧更新看到評論 本文最早發(fā)布于csdn,為原創(chuàng) 常規(guī)方法兩種 let json = arr => { let res = [], obj = {};...

    BlackHole1 評論0 收藏0
  • 跟underscore一起學(xué)數(shù)組去重

    摘要:引子數(shù)組去重是一個老生常談的話題,在面試中也經(jīng)常會被問道。其中如果數(shù)組是排序的,去重運算效率更高,因為排序能夠?qū)⑾嗤臄?shù)排列在一起,方便前后比較。當(dāng)數(shù)組有序?qū)τ趯ο蟮娜ブ?,我們知道為,所以使用比較對象在實際場景中沒有意義。 引子 數(shù)組去重是一個老生常談的話題,在面試中也經(jīng)常會被問道。對于去重,有兩種主流思想: 先排序,線性遍歷后去重,時間復(fù)雜度O(n*log2n); 使用哈希,空間換...

    flybywind 評論0 收藏0
  • JS中的數(shù)組去重方法總結(jié)

    摘要:第一種常規(guī)法最直觀的思路創(chuàng)建一個新數(shù)組如果新數(shù)組中已經(jīng)包含了當(dāng)前的第個元素,那么跳過否則把當(dāng)前項到新數(shù)組中輸出這種方法用到了方法。特殊情況當(dāng)數(shù)組中既有數(shù)字又有字符串的時候,如此時希望和都保留,那么上述的方法無法達到要求。 第一種:常規(guī)法(最直觀的思路) function unique(arr){ var n = []; //創(chuàng)建一個新數(shù)組 for(var i = 0; ...

    Aldous 評論0 收藏0
  • JavaScript 實現(xiàn)數(shù)組更多的高階函數(shù)

    摘要:實現(xiàn)數(shù)組更多的高階函數(shù)吾輩的博客原文場景雖說人人平等,但有些人更加平等。若是有一篇適合萌新閱讀的自己實現(xiàn)數(shù)組更多操作的文章,情況或許會發(fā)生一些變化。類似于的初始值,但它是一個函數(shù),避免初始值在所有分組中進行累加。 JavaScript 實現(xiàn)數(shù)組更多的高階函數(shù) 吾輩的博客原文: https://blog.rxliuli.com/p/fc... 場景 雖說人人平等,但有些人更加平等。 為...

    aervon 評論0 收藏0
  • JS程序

    摘要:設(shè)計模式是以面向?qū)ο缶幊虨榛A(chǔ)的,的面向?qū)ο缶幊毯蛡鹘y(tǒng)的的面向?qū)ο缶幊逃行┎顒e,這讓我一開始接觸的時候感到十分痛苦,但是這只能靠自己慢慢積累慢慢思考。想繼續(xù)了解設(shè)計模式必須要先搞懂面向?qū)ο缶幊蹋駝t只會讓你自己更痛苦。 JavaScript 中的構(gòu)造函數(shù) 學(xué)習(xí)總結(jié)。知識只有分享才有存在的意義。 是時候替換你的 for 循環(huán)大法了~ 《小分享》JavaScript中數(shù)組的那些迭代方法~ ...

    melody_lql 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<