成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

lodash源碼分析之自減的兩種形式

Keven / 2062人閱讀

摘要:作用與用法是的內(nèi)部函數(shù),之前在源碼分析之緩存介紹過(guò)一種這樣的數(shù)據(jù)結(jié)構(gòu)這是一個(gè)二維數(shù)組,每項(xiàng)中的第一項(xiàng)作為緩存對(duì)象的,第二項(xiàng)為緩存的值。

這個(gè)世界需要一個(gè)特定的惡人,可以供人們指名道姓,千夫所指:“全都怪你”。

——村上春樹(shù)《當(dāng)我談跑步時(shí)我談些什么》

本文為讀 lodash 源碼的第六篇,后續(xù)文章會(huì)更新到這個(gè)倉(cāng)庫(kù)中,歡迎 star:pocket-lodash

gitbook也會(huì)同步倉(cāng)庫(kù)的更新,gitbook地址:pocket-lodash

本篇分析的是 assocIndexOf 函數(shù)。

作用與用法

assocIndexOf 是 lodash 的內(nèi)部函數(shù),之前在《lodash源碼分析之Hash緩存》介紹過(guò)一種這樣的數(shù)據(jù)結(jié)構(gòu):

var caches = [["test1", 1],["test2",2],["test3",3]]

這是一個(gè)二維數(shù)組,每項(xiàng)中的第一項(xiàng)作為緩存對(duì)象的 key,第二項(xiàng)為緩存的值。

assocIndexOf 的作用是找出指定的 key 在數(shù)組中的索引值。

例如要找 keytes1 的索引 :

assocIndexOf(caches, "test1") // 0
依賴(lài)
import eq from "../eq.js"

lodash源碼分析之NaN不是NaN

源碼分析
function assocIndexOf(array, key) {
  let { length } = array
  while (length--) {
    if (eq(array[length][0], key)) {
      return length
    }
  }
  return -1
}

這段代碼很精簡(jiǎn),讓 length 自減,調(diào)用 eq 函數(shù),從二維數(shù)組的最后一項(xiàng)開(kāi)始,逐項(xiàng)獲取 key 值,與傳入的 key 比較,遇到匹配的,馬上將該項(xiàng)的索引返回。如果都沒(méi)找到,返回 -1 。返回結(jié)果的規(guī)則與 indexOf 一致。

length--和--length

我們都知道自減還有另外一種前置的形式,即 --length,那將上面的代碼改成 while(--length) 可不可以呢?試一下就知道了。

改了之后,用 caches 來(lái)測(cè)試下:

assocIndexOf(caches, "test3") // 2
assocIndexOf(caches, "test2") // 1
assocIndexOf(caches, "test1") // -1

可以看到,改了之后,只影響到了第一項(xiàng)的結(jié)果,也就是終止條件有問(wèn)題,根本沒(méi)有遍歷到第一項(xiàng),但是后面的結(jié)果是正確的,也就說(shuō)循環(huán)體里的 length 沒(méi)有受到影響。

你可能會(huì)有點(diǎn)疑惑,while 的終止條件比較的不是 length 嗎?為什么 length-- 正確,而 --length 不正確呢?

其實(shí) while 的終止條件并不是 length ,而是 length-- 表達(dá)式所返回的結(jié)果?,F(xiàn)在來(lái)看一下 length----length 所返回的結(jié)果有什么差別。

var length = 3
length-- // 3
length // 2

可以看到, length-- 返回的結(jié)果和自減前的一致,但是 length 已經(jīng)減少 1 了。因此使用 length-- ,最后一次進(jìn)入循環(huán)體應(yīng)該在 length 等于 1 的時(shí)候。

再來(lái)看 --length

var length = 3
--length // 2
length // 2

--length 返回的結(jié)果跟自減后的結(jié)果一致,因此最后一次進(jìn)入循環(huán)體應(yīng)該是 length2 的時(shí)候,因此如果換成這種形式,會(huì)漏掉一次循環(huán)。

參考

代碼之謎(二)- 語(yǔ)句與表達(dá)式

License

署名-非商業(yè)性使用-禁止演繹 4.0 國(guó)際 (CC BY-NC-ND 4.0)

最后,所有文章都會(huì)同步發(fā)送到微信公眾號(hào)上,歡迎關(guān)注,歡迎提意見(jiàn):

作者:對(duì)角另一面

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

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

相關(guān)文章

  • lodash源碼分析之baseFindIndex中的運(yùn)算符優(yōu)先級(jí)

    摘要:從表中可以看到,比較運(yùn)算符的優(yōu)先級(jí)為,而三元表達(dá)式條件運(yùn)算符的優(yōu)化級(jí)為,因此可以確定比較運(yùn)算符的優(yōu)先級(jí)要比三元表達(dá)式的要高,循環(huán)條件其實(shí)等價(jià)于第二種寫(xiě)法。從上表中也可以看出前綴自增比比較運(yùn)算符的優(yōu)化級(jí)要高。 我悟出權(quán)力本來(lái)就是不講理的——蟑螂就是海米;也悟出要造反,內(nèi)心必須強(qiáng)大到足以承受任何后果才行?!睄u《城門(mén)開(kāi)》 本文為讀 lodash 源碼的第十篇,后續(xù)文章會(huì)更新到這個(gè)倉(cāng)庫(kù)中...

    Meathill 評(píng)論0 收藏0
  • lodash源碼分析之List緩存

    摘要:在之前的文章中已經(jīng)介紹過(guò),檢測(cè)的是對(duì)應(yīng)的數(shù)組在二維數(shù)組中的索引,其行為跟一致,不存在于二維數(shù)組中時(shí),返回,否則返回索引值。最后將緩存數(shù)量減少。 昨日我沿著河岸/漫步到/蘆葦彎腰喝水的地方順便請(qǐng)煙囪/在天空為我寫(xiě)一封長(zhǎng)長(zhǎng)的信 潦是潦草了些/而我的心意/則明亮亦如你窗前的燭光/稍有曖昧之處/勢(shì)所難免/因?yàn)轱L(fēng)的緣故 ——洛夫《因?yàn)轱L(fēng)的緣故》 本文為讀 lodash 源碼的第七篇,后續(xù)文章會(huì)...

    leon 評(píng)論0 收藏0
  • lodash源碼分析之List緩存

    摘要:在之前的文章中已經(jīng)介紹過(guò),檢測(cè)的是對(duì)應(yīng)的數(shù)組在二維數(shù)組中的索引,其行為跟一致,不存在于二維數(shù)組中時(shí),返回,否則返回索引值。最后將緩存數(shù)量減少。 昨日我沿著河岸/漫步到/蘆葦彎腰喝水的地方順便請(qǐng)煙囪/在天空為我寫(xiě)一封長(zhǎng)長(zhǎng)的信 潦是潦草了些/而我的心意/則明亮亦如你窗前的燭光/稍有曖昧之處/勢(shì)所難免/因?yàn)轱L(fēng)的緣故 ——洛夫《因?yàn)轱L(fēng)的緣故》 本文為讀 lodash 源碼的第七篇,后續(xù)文章會(huì)...

    SunZhaopeng 評(píng)論0 收藏0
  • lodash源碼分析之緩存方式的選擇

    摘要:接口設(shè)計(jì)同樣實(shí)現(xiàn)了跟一致的數(shù)據(jù)管理接口,如下依賴(lài)源碼分析之緩存源碼分析之緩存源碼分析是否使用這個(gè)函數(shù)用來(lái)判斷是否使用緩存。返回表示使用緩存,返回則使用或者緩存。獲取對(duì)應(yīng)緩存方式的實(shí)例這個(gè)函數(shù)根據(jù)來(lái)獲取儲(chǔ)存了該的緩存實(shí)例。 每個(gè)人心里都有一團(tuán)火,路過(guò)的人只看到煙?!吨翋?ài)梵高·星空之謎》 本文為讀 lodash 源碼的第八篇,后續(xù)文章會(huì)更新到這個(gè)倉(cāng)庫(kù)中,歡迎 star:pocket-...

    HitenDev 評(píng)論0 收藏0
  • lodash源碼分析之緩存方式的選擇

    摘要:接口設(shè)計(jì)同樣實(shí)現(xiàn)了跟一致的數(shù)據(jù)管理接口,如下依賴(lài)源碼分析之緩存源碼分析之緩存源碼分析是否使用這個(gè)函數(shù)用來(lái)判斷是否使用緩存。返回表示使用緩存,返回則使用或者緩存。獲取對(duì)應(yīng)緩存方式的實(shí)例這個(gè)函數(shù)根據(jù)來(lái)獲取儲(chǔ)存了該的緩存實(shí)例。 每個(gè)人心里都有一團(tuán)火,路過(guò)的人只看到煙?!吨翋?ài)梵高·星空之謎》 本文為讀 lodash 源碼的第八篇,后續(xù)文章會(huì)更新到這個(gè)倉(cāng)庫(kù)中,歡迎 star:pocket-...

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

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

0條評(píng)論

閱讀需要支付1元查看
<