javascript - 更新 Javascript 二维数组中的元素会更新整个列
问题描述
我在Javascript中创建了一个二维数组(4x4),如下所示:
let visited = new Array(4).fill(new Array(4).fill(false));
console.log(visited);
[
[ false, false, false, false ],
[ false, false, false, false ],
[ false, false, false, false ],
[ false, false, false, false ]
]
当我尝试更新单个元素时,它最终会更新整个列。为什么会这样?
visited[0][0] = true;
console.log(visited);
你可以看到这个repl
预期的:
[
[ true, false, false, false ],
[ false, false, false, false ],
[ false, false, false, false ],
[ false, false, false, false ]
]
实际的:
[
[ true, false, false, false ],
[ true, false, false, false ],
[ true, false, false, false ],
[ true, false, false, false ]
]
解决方案
的文档Array.fill
是您的朋友:
请注意,数组中的所有元素都将是这个精确值。
这告诉您每个子数组实际上都是相同的数组。因此,如果你改变一个,你就改变了它们。
查看下面的代码,您会看到第一个比较是false
,而第二个比较是true
console.log([false,false,false,false] ===[false,false,false,false])
const arr = new Array(4).fill([false,false,false,false]);
console.log(arr[0] === arr[1]);
推荐阅读
- pip - 在 conda env .yml 文件中指定 .whl 文件的 url
- javascript - 我可以从渲染器的着色器访问不预乘颜色吗
- swift - 如何在 Swift 中按顺序执行大量网络调用?
- powershell - 如何找出并用规则替换指定的字符串然后写入源文件?
- php - 用PHP将值解析为整数?
- r - 如何在 R 的 Sidepanel 闪亮应用程序中包含输出
- javascript - 设置配置不是函数
- typescript - Cloud Functions - 在可变时间后删除 Firestore 文档并通知用户
- jquery - 为什么 $post 不起作用但 $ajax 在 asp.net web api 控制器上起作用?
- php - 解析错误:语法错误,意外的 ';',在第 37 行的 C:\xampp\htdocs\eazyR\eazy\sites\erp\ajaxify\excel.php 中期待 ']'