【JavaScript】Array.fill(new Array

【JavaScript】Array.fill(new Array,第1张

创建一个二维数组,思路一般是先创建一个一维数组,表示数组的行,然后再给这个一维数组的每一项放一个数组,就表示有多少列。
按照这个思路,在JS中想创建一个二维数组,先生成一个一维数组new Array(m),表示数组有m行,然后给数组每一项再填充一个n项的数组,并将所有项初始化为0,new Array(m).fill(new Array(n).fill(0)表示数组有n列,得到一个m行n列的二维数组:

假设我们现在想给第一项赋值为1,我们可以写arr[0][0]=1,却发现所有行的第一列都被赋值为1了:

这是为什么呢? 当Array.fill()的参数是一个引用类型的数据时,那么等于把这个数据的地址给了arr的每一项,相当于每一行都指向同一个数组地址,那么当你在 *** 作任意一个位置的值时,所有行都会跟着变化,每一行的结果注定是一样的。

那么如何正确的创建二维数组呢?

1.for循环填充行

let arr = new Array(m)
for (let i = 0; i < m; i++) {
    arr[i] = new Array(n).fill(0)
}

2.Array.from()

let arr = Array.from(Array(m), () => new Array(n).fill(0))

3.数组的map方法

let arr = Array(m).fill().map(() => Array(n).fill(0))

【注意】在这里,不能删除第一个fill(),map方法是对数组中的每个值执行回调函数,数组中必须有值,不然map方法不起作用。fill()不写参数,默认填充undefined。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/795995.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存