javascript - 简单的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' ],
]
解决方案
原来我是个白痴,应该有 RTFM。如果 Array.fill() 被传递一个对象,它会存储引用。
推荐阅读
- jenkins - dsl中的jenkins naginator插件
- ada - 相当于 Ada 中的访问器
- c# - 无法在 MAC OS 上安装 ML.NET(项目不支持 DotnetTool)
- javascript - Firebase 存储 getDownloadUrl 不是函数
- sql-server - 将共享数据集参数传递给表达式?
- postgresql - 如何在 Postgres 和 Apache Superset 中使用公元前 80 万年
- video - Xamarin 表单:用于播放视频的 Webview 在 iPhone 中不起作用?
- css - 为什么我的两个菜单“Font Awesome”图标突然显示为正方形?
- python - 如何从python中的csv文件中动态选择一行
- c# - .Net Core 3 和 Blazor 的 C# Selenium 测试用例可靠性