JavaScript递归中数组存入另一数组后恢复初始值的原因
问题原因与解决办法
这是因为JavaScript里数组属于引用类型——你往solutions里推入的不是当前matrix的副本,而是指向该数组的内存地址引用。
结合你的代码流程来看:
- 找到解时执行
console.log(matrix),此时matrix确实是填充完成的状态; - 但你把
matrix直接推入solutions,本质是把数组的引用存了进去; - 之后递归回溯,会执行
matrix[row][col] = -1重置矩阵,这个操作会直接修改引用指向的原数组; - 等整个递归流程结束后,
solutions里存储的引用指向的已经是被重置回初始值的矩阵了。
解决办法
要保存当前的解,必须创建matrix的深拷贝再推入数组,常用两种方式:
- 使用JSON序列化/反序列化快速生成深拷贝:
solutions.push(JSON.parse(JSON.stringify(matrix)));
- 手动遍历矩阵创建新的二维数组(更适合简单二维数组):
const matrixCopy = matrix.map(row => [...row]); solutions.push(matrixCopy);
内容的提问来源于stack exchange,提问作者Luis Belloch
相关产品推荐
相关产品推荐

