javascript切片没有进行浅层复制

javascript切片没有进行浅层复制,javascript,Javascript,我编写了以下JS程序来解决N-queen问题,效果很好。 但后来我试图用一种特定的格式修改输出。 然后我发现了一个奇怪的问题 如果您查看下面的代码,在函数“findSolution”中,我将传递一个数组-“board”。 然后我在这一行复制这个数组- let boardCp=board.slice(); //Board is an array of arrays (idea is to never modify the original board object) 然后将此副本传递给另一个函

我编写了以下JS程序来解决N-queen问题,效果很好。 但后来我试图用一种特定的格式修改输出。 然后我发现了一个奇怪的问题

如果您查看下面的代码,在函数“findSolution”中,我将传递一个数组-“board”。 然后我在这一行复制这个数组-

let boardCp=board.slice(); //Board is an array of arrays (idea is to never modify the original board object) 
然后将此副本传递给另一个函数进行修改。 当该函数修改此副本时,原始阵列(本例中为“板”)应保持不变-对吗? 但令人惊讶的是,我看到原始数组也在被修改

有人能帮我理解为什么会这样吗?请让我知道,如果我需要提供进一步的细节

var solveNQueens=函数(A)
{
var-retArr=[];
var board=[];

对于(var i=0;i
slice
方法不进行深度复制

它仅复制阵列的第一层(仅限sting和number)

我们考虑下面的例子:

const nestedArray=[
1.
[2, 3],
{y1:4,y2:5},
];
const cloneArray=nestedArray.slice();
//这是安全的
cloneArray[0]=“新值1”;
console.log(nestedArray[0]);//预期为1
//cloneArray[1]是指向原始数组的指针
cloneArray[1][0]=“新值2”;
console.log(nestedArray[1]);//预期为2,获得“新值2”
//cloneArray[2]是指向原始对象的指针
cloneArray[2].y1='新值4';

console.log(nestedArray[2]);//expect{y1:4,y2:5},got{y1:'new value 4',y2:5}
线路板是如何修改的?是修改原始数组还是修改原始数组中的对象?
var x=[];console.log(x==x.slice())
-这是错误的。slice确实复制了数组的方式(和位置)你确定
线路板
已经被修改了吗?@Jaromanda这几乎肯定是标题中的一个输入错误,代码使用了
切片
对不起,标题是误导性的……我的意思是说“切片”而不是“拼接”
线路板是一个数组
-我假设你解释了所包含数组的元素ng作为数组中的一个更改,这不是它的工作方式…
slice
将复制对元素的引用,复制的数组将复制对相同包含数组的引用…感谢您的洞察力。那么您是说如果我对每个包含的数组进行切片,那么它应该解决它吗?