js数组的空槽位和map方法

Array(n).map(() => Array(n).fill(false))和 [...Array(n)].map(() => Array(n).fill(false))的结果并不一样,后者是一个全是false的二维数组,而前者还是Empty*n的一维数组

原因在于 Array(n).map() 方法的行为与预期不同,这与 map 方法的机制有关。

当你使用 Array(n) 创建一个长度为 n 的数组时,你得到的是一个含有 n 个空槽位的数组,而不是 n 个 undefined 值。这些空槽位是特殊的,因为它们实际上并不是数组中的有效索引。当你在这样的数组上调用 map() 方法时,map 会跳过空槽位,不会执行提供的回调函数。

举个例子来说,如果你做下面这个操作:

const arr = Array(3).map(() => 'hello');

arr 并不会变成 ['hello', 'hello', 'hello'],而是会保持为 [empty × 3],因为 map 方法跳过了所有的空槽位。

另一方面,当你使用扩展运算符 ...,它会将 Array(n) 中的空槽位转换为 undefined 值,因为扩展运算符迭代的是数组的索引。这样一来,[...Array(n)] 就变成了一个实际包含 undefined 的数组,而不是有空槽位的数组。然后,你可以在这个新数组上使用 map() 方法,它会为数组中的每个 undefined 元素执行回调函数。

因此:

const arr = [...Array(3)].map(() => 'hello');

这时 arr 就会变成 ['hello', 'hello', 'hello']

所以,当你想要利用 map 方法来初始化一个二维数组时,你需要确保原始数组不是有空槽位的数组。使用扩展运算符或者其他方法(例如 Array.from 或者先使用 fill)来创建一个没有空槽位的数组,然后再用 map 方法去填充它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值