稀疏数组与密集数组
前言
在工作中,经常会遇到这种情况,想要获得内容为数字1-10的数组,使用以下方法确得不到相应的结果
let arr = new Array(10).map((_, i) => i + 1)
这是为什么呢,这就引出以下这个概念稀疏数组
稀疏数组
什么是稀疏数组呢?顾名思义,就是不连续的数组,数组元素之间存在间隙。上面生成数字的代码结果如下,会发现是10个empty。
实际上,new Array(10)
生成的就是稀疏数组,数组中没有相应的索引,阅读数组map方法的源码可以发现,该方法是按照数组的索引去遍历的,
在控制台中敲入如下代码,我们发现索引值不存在与数组arr中,所以调用执行最上面的代码时无法获得想要获得的结果。
密集数组
与稀疏数组相对应的,就是密集数组,所谓密集数组,就是占据连续内存空间,数组元素间不存在间隙。
回到开头,我们想要获得内容为1-10的密集数组,可以使用以下方法:
let arr = new Array(10).fill(0).map((_, i) => i + 1)
let arr = Array.from({ length: 10 }, (_, i) => i + 1)
let arr = Array.apply(null, Array(10)).map((_, i) => i + 1)
稀疏数组与密集数组
http://yellowcan.top/2021/07/15/xi-shu-shu-zu-yu-mi-ji-shu-zu/