今天在创建二维数组时发现了一个问题
const G = new Array(2).fill(Array.from(new Array(3)).fill(0));
如上所示,这行代码创建了一个二维数组
G[0][0] = 1;
但当我们执行上面这行代码时,本来想的情况是只改变第一个数,
但是结果却是下面这样的:
上网查之后发现,fill方法填充的是引用类型,
所以改一个数据,相同引用的数据也会变。
解决方案:
使用Array.from()
const G = Array.from({ length: 2 }, () => new Array(3).fill(0));
G[0][0] = 1;
console.log(G);
或者
const G = new Array(2).fill(0).map(() => new Array(3).fill(0))
G[0][0] = 1;
console.log(G);
再打开控制台,就可以看到成功了~
注:
Array.from()的第二个参数相当于数组中的map()方法。