You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript递归中数组存入另一数组后恢复初始值的原因

问题原因与解决办法

这是因为JavaScript里数组属于引用类型——你往solutions里推入的不是当前matrix的副本,而是指向该数组的内存地址引用。

结合你的代码流程来看:

  • 找到解时执行console.log(matrix),此时matrix确实是填充完成的状态;
  • 但你把matrix直接推入solutions,本质是把数组的引用存了进去;
  • 之后递归回溯,会执行matrix[row][col] = -1重置矩阵,这个操作会直接修改引用指向的原数组;
  • 等整个递归流程结束后,solutions里存储的引用指向的已经是被重置回初始值的矩阵了。

解决办法

要保存当前的解,必须创建matrix的深拷贝再推入数组,常用两种方式:

  1. 使用JSON序列化/反序列化快速生成深拷贝:
solutions.push(JSON.parse(JSON.stringify(matrix)));
  1. 手动遍历矩阵创建新的二维数组(更适合简单二维数组):
const matrixCopy = matrix.map(row => [...row]);
solutions.push(matrixCopy);

内容的提问来源于stack exchange,提问作者Luis Belloch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:05:09