我一直在JavaScript做一个sudoku的解算器。有一种非常奇怪的行为。下面是代码和上下文:
solveSudoku = ()=>{
let sectionsCopy_ =sectionsCopy
for(let sect =0; sect< 9; sect++){
for(let box =0; box <9; box++){
if(sectionsCopy[sect][box] === ''){
for(let num=1; num<=9;num++){
if(this.isPossible(sect,box,num)){
sectionsCopy[sect][box]=''+num
this.solveSudoku()
sectionsCopy[sect][box]=''
}
}
return
}
}
}
debugger
console.log(sectionsCopy)
}这是在一个类内
sectionsCopy是一个全局变量。
sectionsCopy_仅用于调试(轻松查看全局变量的值)
isPossible()是确定num在该位置是否有效的函数。
组是数独3x3平方的索引
box 是数独中单元框的索引。
问题是:
以数独为例:

当您单击求解时,sectionsCopy变量将存储:
[
["2","6","" ,"4","7","" ,"5","8","1"],
["" ,"" ,"3","" ,"" ,"" ,"" ,"" ,"4"],
["" ,"1","5","" ,"" ,"8","7","6","3"],
["" ,"3","" ,"" ,"" ,"6","" ,"" ,"8"],
["4","8","9","" ,"" ,"2","3","1","" ],
["" ,"7","" ,"8","3","" ,"" ,"" ,"" ],
["6","9","" ,"3","" ,"" ,"" ,"1","" ],
["" ,"" ,"8","" ,"9","" ,"5","" ,"" ],
["" ,"" ,"7","2","" ,"" ,"" ,"9","6"]
]当我在没有打开调试器的情况下运行它时,我会得到以下结果:

如果打开调试器,我会看到以下内容:

下面是并排的结果,不使用调试器时的结果与使用调试器时的结果:

我原以为调试器下的行为在没有调试器的情况下是一样的(否则就会像本例一样毫无用处)。
我尝试过console.log(sectionsCopy_),但我知道数组是不可变的,所以没关系
发布于 2022-11-09 19:11:22
感谢@epascarello便条。
似乎console.log是在数据被修改的时候输出数据的。
我做的解决办法是
let solution = JSON.parse(JSON.stringify(sections))
console.log(solution)而不是
console.log(sections)https://stackoverflow.com/questions/74379616
复制相似问题