【发布时间】:2020-11-01 04:00:53
【问题描述】:
今天我将我的 Python 代码移植到 JavaScript 中,发现了这种行为。
代码:
var a = new Array(2).fill(new Array(3).fill([0, 0]));
for (i=0; i<2; i++) {
for (j=0; j<3; j++) {
a[i][j] = [i, j];
//console.table(a); //for debugging
}
}
我认为a 应该得到什么(作为二维数组):
--------------------------
[0, 0] | [0, 1] | [0, 2] |
--------------------------
[1, 0] | [1, 1] | [1, 2] |
--------------------------
JavaScript 给了我什么:
--------------------------
[1, 0] | [1, 1] | [1, 2] |
--------------------------
[1, 0] | [1, 1] | [1, 2] |
--------------------------
看起来 JavaScript 中使用了一些其他类型的逻辑,而不是我认为的。我只是将[i, j] 分配给[i][j]-th 条目,但结果不是我想要的。
- 我的代码有误吗?
- 为什么 for 循环逻辑在 JavaScript 中不起作用?
- 那我应该怎么做才能得到想要的结果呢?
【问题讨论】:
-
如何打印出数组内容?
-
因为您使用的是
Array.fill,a[1]是对a[0]的引用,所以当您更改a[1][0]时,您也会更改a[0][0]。 -
请参阅this question,了解如何正确创建空二维数组。
-
关键是
.fill()不会用内部数组的copies填充外部数组,而是引用同一个single数组.
标签: javascript arrays loops for-loop