小编典典

Array.fill(Array)通过引用创建副本,而不是通过值创建副本[duplicate]

javascript

我正在尝试使用创建一个6 x 12矩阵 Array.fill

let m = Array(6).fill(Array(12).fill(0));

虽然这样做有效,但问题是内部数组实际上都引用同一Array对象。

let m = Array(6).fill(Array(12).fill(0));
m[0][0] = 1;
console.log(m[1][0]); // Outputs 1 instead of 0

我想(和预期)的值m[1][0]0

如何强制Array.fill填充给定参数的按值复制(例如Array(12).fill(0),在我的情况下该参数)而不是按引用复制?


阅读 318

收藏
2020-05-01

共1个答案

小编典典

您可以使用Array.from()代替:

感谢Pranav C Balan在评论中提出的关于进一步改善此问题的建议。

let m = Array.from({length: 6}, e => Array(12).fill(0));



m[0][0] = 1;

console.log(m[0][0]); // Expecting 1

console.log(m[0][1]); // Expecting 0

console.log(m[1][0]); // Expecting 0

原始声明(上面进行了优化):

let m = Array.from({length: 6}, e => Array.from({length: 12}, e => 0));
2020-05-01