🎈先来看一段 JS 代码:
const n = 2
let arr = new Array(n).fill(0).map(() => new Array(n).fill(0))
确实帅。
解释下, map()
方法的作用是将调用它的数组的每一个元素逐个传递给指定的函数, 然后用这个函数的返回值代替原本的这个元素。
简单的 demo:
let arr = [1, 2, 3]
arr = arr.map((x) => x * 2)
// [2, 4, 6]
// 数组 arr 调用 map 函数,
// arr 中的每一个元素都会逐一地被当为
// map 函数中我们指定函数的参数, 然后用返回值代替原值。
回到下面代码块:
const n = 2
let arr = new Array(n).fill(0).map(() => new Array(n).fill(0))
解释:
new Array(n)
创建一个长度为n
的数组,fill(0)
为其中的每一个元素填充为0
。目前已经有了一个长度为n
, 每一个元素都为0
的数组- 调用
map()
, 将数组中的每一个元素——0
作为入参传入map()
中我们指定的函数,这个函数会返回一个长度为n
的数组,并用 0 填充。 - 执行完
map()
之后, 我们得到了一个长度为n
的数组, 这些数组中的每一个元素也都会是一个数组,且长度为n
,因为n
为2
,所以我们得到了一个n * n
的矩阵。打印如下:
// [Array(2), Array(2)]