🎈先来看一段 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)]