首页 > 解决方案 > Array.fill() 然后更改二维数组中的值会为 JS 中的列提供相同的输出

问题描述

所以我用 0 填充了这个二维数组,然后改变了这个二维数组第一行的第一个值,但是它改变了每一行的第一个值,有人知道为什么会这样吗?

let arr = Array<number[]>(5).fill(Array<number>(5).fill(0));

arr[0][0] = 10;
console.log(arr);

输出

[
  [ 10, 0, 0, 0, 0 ],
  [ 10, 0, 0, 0, 0 ],
  [ 10, 0, 0, 0, 0 ],
  [ 10, 0, 0, 0, 0 ],
  [ 10, 0, 0, 0, 0 ]
]

预期产出

[
  [ 10, 0, 0, 0, 0 ],
  [ 0, 0, 0, 0, 0 ],
  [ 0, 0, 0, 0, 0 ],
  [ 0, 0, 0, 0, 0 ],
  [ 0, 0, 0, 0, 0 ]
]```

标签: typescriptmultidimensional-arraydeno

解决方案


Array.prototype.fill()将数组中的每个元素设置为指定值。要生成一个填充了可能不同的值的数组,您可以使用Array.from()

let arr = Array.from({ length: 5 }, () => Array<number>(5).fill(0));

推荐阅读