如何解決數(shù)組塌陷?
談到數(shù)組塌陷,估計(jì)小伙伴們不知道什么意思,先看一張圖。

從上圖我們大概明白了“塌陷”的意思,即如果刪除了數(shù)組中的某一個(gè)元素,當(dāng)前這個(gè)索引的內(nèi)容不會(huì)是空的,也不會(huì)占位,數(shù)組只會(huì)把后面的元素往前補(bǔ)上,這就導(dǎo)致后面元素原先的索引發(fā)生改變,這種現(xiàn)象就是數(shù)組塌陷。
案例分析
我們來(lái)看看數(shù)組塌陷帶來(lái)的苦惱。
簡(jiǎn)單描述下,在一個(gè)數(shù)組 arr 中存放四個(gè)函數(shù) fn1,fn2,fn3,fn4,分別打印 1,2,3,4,同時(shí)第二個(gè)函數(shù)內(nèi)部刪除數(shù)組中的第一個(gè)元素 fn1。
當(dāng)我們執(zhí)行 obj.fire() 的時(shí)候,依次會(huì)把數(shù)組中的四個(gè)函數(shù)都執(zhí)行一遍,但是由于數(shù)組塌陷的問題,導(dǎo)致我們?cè)趫?zhí)行第二個(gè)函數(shù)(i = 1)的時(shí)候,刪除了第一個(gè)元素。

這就導(dǎo)致后面的元素的索引全部減一,再往后執(zhí)行的 i = 2,就不再是之前的 fn3,而是是最后一個(gè)元素 fn4了,所以最終就只能打印 1,2,4。
解決辦法
當(dāng)我們知道數(shù)組塌陷這個(gè)原因之后,再刪除元素的時(shí)候,不應(yīng)該直接刪掉,而應(yīng)該是使用 null 替換掉當(dāng)前的元素。當(dāng)?shù)诙伪闅v數(shù)組的時(shí)候,把為 null 的元素過濾掉就 ok 了。
了解了數(shù)組塌陷之后,再去熟悉發(fā)布訂閱模式,就不會(huì)陷入事件中心的坑了,這樣可以避免在事件調(diào)度上出現(xiàn)一些錯(cuò)誤。
推薦閱讀:
臃腫項(xiàng)目怎么拆?都閃開,讓 Nginx 來(lái)!
前端配置化平臺(tái)——快速搞定活動(dòng)頁(yè)面
H5 活動(dòng)頁(yè)面快速生成神器——Mocha
點(diǎn)個(gè)“在看”和“贊”吧,
畢竟我是要成為前端網(wǎng)紅的人。
