首页 > 解决方案 > 简单的for循环,简单的数组,完全莫名其妙的输出

问题描述

我有一个我认为是一个非常简单的嵌套循环来填充二维数组(重点是有条件地用值填充表)。结果出乎意料,我看不到或发现我的错误。

我不明白为什么所有数组都被填充(表 [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' ],
]

标签: javascriptarraysfor-loop

解决方案


原来我是个白痴,应该有 RTFM。如果 Array.fill() 被传递一个对象,它会存储引用。


推荐阅读