国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS數(shù)組關(guān)聯(lián)查找的性能優(yōu)化

Stardustsky / 1479人閱讀

摘要:傳統(tǒng)個(gè)數(shù)組的嵌套查詢一般通過(guò)兩個(gè)循環(huán)體嵌套實(shí)現(xiàn),時(shí)間復(fù)雜度為而通過(guò)建立索引對(duì)象的形式的時(shí)間復(fù)雜度為這種犧牲內(nèi)存來(lái)達(dá)到復(fù)雜度降冪的的方法能提高多少性能呢下面是以數(shù)組長(zhǎng)度為數(shù)組為的亂序數(shù)組進(jìn)行測(cè)試的測(cè)試結(jié)果。

傳統(tǒng)2個(gè)數(shù)組的嵌套查詢一般通過(guò)兩個(gè)循環(huán)體嵌套實(shí)現(xiàn),時(shí)間復(fù)雜度為:n^2;
而通過(guò)建立索引對(duì)象的形式的時(shí)間復(fù)雜度為:n;這種犧牲內(nèi)存來(lái)達(dá)到復(fù)雜度降冪的的方法能提高多少性能呢?

下面是以數(shù)組1長(zhǎng)度為10000;數(shù)組2為50000的亂序數(shù)組進(jìn)行測(cè)試的測(cè)試結(jié)果。(測(cè)試結(jié)果的單位都是ms)

Firefox測(cè)試結(jié)果: 平均快48倍

// 第一次
傳統(tǒng)的嵌套循環(huán):1479
建立索引:30
// 第二次
傳統(tǒng)的嵌套循環(huán):1852
建立索引:36
// 第三次
傳統(tǒng)的嵌套循環(huán):1754
建立索引:38

Chrome測(cè)試結(jié)果: 平均快64倍

// 第一次
傳統(tǒng)的嵌套循環(huán):1800
建立索引:26
// 第二次
傳統(tǒng)的嵌套循環(huán):1297
建立索引:35
// 第三次
傳統(tǒng)的嵌套循環(huán):2522
建立索引:27

IE11測(cè)試結(jié)果:平均快11倍

// 第一次
傳統(tǒng)的嵌套循環(huán):110431
建立索引:616
// 第二次
傳統(tǒng)的嵌套循環(huán):7172
建立索引:689
// 第三次
傳統(tǒng)的嵌套循環(huán):7310
建立索引:686

完整的代碼(實(shí)際使用中請(qǐng)考慮數(shù)據(jù)類(lèi)型校驗(yàn)和是否為空判斷)

// 情景:從數(shù)組arr1的id拿到數(shù)組arr2中的所有記錄,統(tǒng)計(jì)急了num的總和寫(xiě)回到arr1中

// 模擬2個(gè)數(shù)組
var start = 1000000
// 定義模擬2個(gè)數(shù)組的方法;count: arr1的長(zhǎng)度值;n: 為arr2為arr1的長(zhǎng)度的多少倍
function getArr(count, n) {
  var o = {
    arr1: [],
    arr2: []
  }
  for(var i = 0; i

核心代碼:

// 使用降冪算法
// arr2進(jìn)行分組,建立以id值為key的對(duì)象
function getArrGroup(arr, id) {
  var o = {}
  var len = arr.length
  var index
  for(var i = 0; i < len; i++){
    index = arr[i][id]
    // 建立索引,防止覆蓋
    if(o[index]===undefined){
      o[index] = [arr[i]]
    } else {
      o[index].push(arr[i])
    }
  }
  return o
}
// 給arr1項(xiàng)的count賦值
function setArrCount(arr, o, id, fn) {
  var len = arr.length
  for(var i = 0; i < len; i++) {
    arr[i] = fn(arr, o, i)// fn定義處理邏輯
  }
  console.log(arr)
  return arr
}

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/98085.html

相關(guān)文章

  • 精讀《JS 引擎基礎(chǔ)之 Shapes and Inline Caches》

    摘要:概述的解釋器優(yōu)化器代碼可能在字節(jié)碼或者優(yōu)化后的機(jī)器碼狀態(tài)下執(zhí)行,而生成字節(jié)碼速度很快,而生成機(jī)器碼就要慢一些了。比如有一個(gè)函數(shù),從獲取值引擎生成的字節(jié)碼結(jié)構(gòu)是這樣的指令是獲取參數(shù)指向的對(duì)象,并存儲(chǔ)在,第二步則返回。 1 引言 本期精讀的文章是:JS 引擎基礎(chǔ)之 Shapes and Inline Caches 一起了解下 JS 引擎是如何運(yùn)作的吧! JS 的運(yùn)作機(jī)制可以分為 AST 分...

    Tecode 評(píng)論0 收藏0
  • JavaScript如何工作:V8引擎深入探究 + 優(yōu)化代碼5個(gè)技巧(譯文)

    摘要:引擎可以是一個(gè)標(biāo)準(zhǔn)的解釋器,也可以是一個(gè)將編譯成某種形式的字節(jié)碼的即時(shí)編譯器。和其他引擎最主要的差別在于,不會(huì)生成任何字節(jié)碼或是中間代碼。不使用中間字節(jié)碼的表示方式,就沒(méi)有必要用解釋器了。 原文地址:https://blog.sessionstack.com... showImg(https://segmentfault.com/img/bVVwZ8?w=395&h=395); 數(shù)周之...

    William_Sang 評(píng)論0 收藏0
  • 前端排序算法總結(jié);前端面試題2.0;JavaScript異步編程

    摘要:與異步編程按照維基百科上的解釋獨(dú)立于主控制流之外發(fā)生的事件就叫做異步。因?yàn)榈拇嬖冢辽僭诒粯?biāo)準(zhǔn)化的那一刻起,就支持異步編程了。然而異步編程真正發(fā)展壯大,的流行功不可沒(méi)。在握手過(guò)程中,端點(diǎn)交換認(rèn)證和密鑰以建立或恢復(fù)安全會(huì)話。 1、前端 排序算法總結(jié) 排序算法可能是你學(xué)編程第一個(gè)學(xué)習(xí)的算法,還記得冒泡嗎? 當(dāng)然,排序和查找兩類(lèi)算法是面試的熱門(mén)選項(xiàng)。如果你是一個(gè)會(huì)寫(xiě)快排的程序猿,面試官在比較...

    aaron 評(píng)論0 收藏0
  • 前端排序算法總結(jié);前端面試題2.0;JavaScript異步編程

    摘要:與異步編程按照維基百科上的解釋獨(dú)立于主控制流之外發(fā)生的事件就叫做異步。因?yàn)榈拇嬖冢辽僭诒粯?biāo)準(zhǔn)化的那一刻起,就支持異步編程了。然而異步編程真正發(fā)展壯大,的流行功不可沒(méi)。在握手過(guò)程中,端點(diǎn)交換認(rèn)證和密鑰以建立或恢復(fù)安全會(huì)話。 1、前端 排序算法總結(jié) 排序算法可能是你學(xué)編程第一個(gè)學(xué)習(xí)的算法,還記得冒泡嗎? 當(dāng)然,排序和查找兩類(lèi)算法是面試的熱門(mén)選項(xiàng)。如果你是一個(gè)會(huì)寫(xiě)快排的程序猿,面試官在比較...

    ARGUS 評(píng)論0 收藏0
  • 前端排序算法總結(jié);前端面試題2.0;JavaScript異步編程

    摘要:與異步編程按照維基百科上的解釋獨(dú)立于主控制流之外發(fā)生的事件就叫做異步。因?yàn)榈拇嬖冢辽僭诒粯?biāo)準(zhǔn)化的那一刻起,就支持異步編程了。然而異步編程真正發(fā)展壯大,的流行功不可沒(méi)。在握手過(guò)程中,端點(diǎn)交換認(rèn)證和密鑰以建立或恢復(fù)安全會(huì)話。 1、前端 排序算法總結(jié) 排序算法可能是你學(xué)編程第一個(gè)學(xué)習(xí)的算法,還記得冒泡嗎? 當(dāng)然,排序和查找兩類(lèi)算法是面試的熱門(mén)選項(xiàng)。如果你是一個(gè)會(huì)寫(xiě)快排的程序猿,面試官在比較...

    April 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<