如何解决数组塌陷?

我心飞翔 分类:javascript

​谈到数组塌陷,估计小伙伴们不知道什么意思,先看一张图。

如何解决数组塌陷?

从上图我们大概明白了“塌陷”的意思,即如果删除了数组中的某一个元素,当前这个索引的内容不会是空的,也不会占位,数组只会把后面的元素往前补上,这就导致后面元素原先的索引发生改变,这种现象就是数组塌陷。

案例分析

我们来看看数组塌陷带来的苦恼。

简单描述下,在一个数组 arr 中存放四个函数 fn1,fn2,fn3,fn4,分别打印 1,2,3,4,同时第二个函数内部删除数组中的第一个元素 fn1。

如何解决数组塌陷?

当我们执行 obj.fire() 的时候,依次会把数组中的四个函数都执行一遍,但是由于数组塌陷的问题,导致我们在执行第二个函数(i = 1)的时候,删除了第一个元素。

如何解决数组塌陷?

这就导致后面的元素的索引全部减一,再往后执行的 i = 2,就不再是之前的 fn3,而是是最后一个元素 fn4了,所以最终就只能打印 1,2,4。

解决办法

当我们知道数组塌陷这个原因之后,再删除元素的时候,不应该直接删掉,而应该是使用 null 替换掉当前的元素。当第二次遍历数组的时候,把为 null 的元素过滤掉就 ok 了。

如何解决数组塌陷?

了解了数组塌陷之后,再去熟悉发布订阅模式,就不会陷入事件中心的坑了,这样可以避免在事件调度上出现一些错误。

作者:掘金-如何解决数组塌陷?

回复

我来回复
  • 暂无回复内容