使用新的array().fill(0)错误创建2D数组

Create 2D array using new Array().fill(0) bug?

本文关键字:错误 创建 2D 数组 fill array      更新时间:2023-09-26

我想创建一个2d数组,但我发现了一个有趣的行为

const column = 10;
const row = 10;
let matrix = new Array(row).fill(new Array(column).fill(0));
matrix[0][1] = 1;
console.log(matrix)

令我惊讶的是,我得到的结果如下:

0 2 0 0 0 0 0 0 0 0 
0 2 0 0 0 0 0 0 0 0 
0 2 0 0 0 0 0 0 0 0 
0 2 0 0 0 0 0 0 0 0 
0 2 0 0 0 0 0 0 0 0 
0 2 0 0 0 0 0 0 0 0 
0 2 0 0 0 0 0 0 0 0 
0 2 0 0 0 0 0 0 0 0 
0 2 0 0 0 0 0 0 0 0 
0 2 0 0 0 0 0 0 0 0 

整个列编号1都设置为1,我可以知道我为什么会出现这种行为吗?

Array#fill方法填充相同的数组,元素是对单个数组的引用。因此,您需要创建单独的数组作为元素。所以更新一个将反映所有其他,因为它们不是不同的数组,它们是相同的。

使用Array.from()可以通过映射函数创建和生成值。

const column = 10;
const row = 10;
let matrix = Array.from({
  // create array of length `row`
  length: row 
  // map function to generate values
}, () => new Array(column).fill(0));
matrix[0][1] = 1;
console.log(matrix)

@PranavCBalan有权。

它是这样的:

let matrix = new Array(row);
var x = new Array(column).fill(0);
matrix[0] = matrix[1] = .. = matrix[column - 1] = x;

矩阵是一个对象的数组。