简单的循环,简单的数组,令人困惑的输出

时间:2019-10-11 15:12:01

标签: javascript arrays for-loop

我有一个非常简单的嵌套循环来填充2d数组(关键是有条件地用值填充表)。结果远远超出了预期,我看不到或找不到我的错误。

我不明白为什么所有数组都被填充(table [0]和[1]应该为空,循环仅从2开始)以及为什么所有数组都被相同的填充。 内部if的console.log确实表明那部分代码仅在其应有的时间运行并产生预期的输出,这意味着赋值仅与验证为正确的值一起发生。然而,甚至在R + 1的内部循环还未开始之前,table [R + 1]已经用table [R]的内容填充了。

基本上(错误地调试了console.log),我的代码从未分配错误填充的字段,而是将其填充。还会覆盖其他值。

在Node.js和Chrome控制台中观察到,没有尝试其他运行时。

代码:

const table = (new Array(7)).fill(new Array(7));
for (let R = 2; R <= 6; R++) {
  for (let N = 2; N <= 6; N++) {
    if (R + N <= 8) {
      table[R][N] = '' + R + N;
    }
  }
}

预期结果:

[
[ , , , , , , ],
[ , , , , , , ],
[ , , '22', '23', '24', '25', '26' ],
[ , , '32', '33', '34', '35', ],
[ , , '42', '43', '44', , ],
[ , , '52', '53', , , ],
[ , , '62', , , , ]
]

实际结果:

[
[ , , '62', '53', '44', '35', '26' ],
[ , , '62', '53', '44', '35', '26' ],
[ , , '62', '53', '44', '35', '26' ],
[ , , '62', '53', '44', '35', '26' ],
[ , , '62', '53', '44', '35', '26' ],
[ , , '62', '53', '44', '35', '26' ],
[ , , '62', '53', '44', '35', '26' ],
]

1 个答案:

答案 0 :(得分:0)

结果证明我是个白痴,应该有RTFM。 如果Array.fill()传递了一个对象,则它将存储引用。