What is the difference between a shallow copy and a deep copy with JavaScript arrays?
本问题已经有最佳答案,请猛点这里访问。
根据MDN文档,调用
请参阅slice()的MDN链接。
但是,如果我在控制台中运行类似的简单测试:
1 2 | var test = [[1,2,3],7,8,9]; var shallow_copy = test.slice(); |
并且检查浅拷贝,我可以看到整个二维数组似乎被复制了。
浅拷贝和深拷贝有什么区别?如果我猜的话,我会称之为一个深刻的副本。
要查看区别,请尝试:
1 2 | shallow_copy[0][2] = 4; console.dir(test); |
您将看到
深拷贝将递归地执行浅拷贝,直到所有内容都是原始文件的新拷贝。
基本上,您只需要获得对原始变量/数组的引用。更改引用也将更改原始数组。您需要循环原始数组的值并形成一个副本。
考虑这个例子:
1 | var orig = { a: 'A', b: 'B', c: 'C' }; |
假设您希望创建此的副本,这样即使更改原始值,也可以始终返回原始值。
我能做到这一点:
1 | var dup = orig; //Shallow copy! |
如果我们改变一个值:
1 | dup.a = 'Apple'; |
由于我们有一份浅显的副本,或参考了var
但是,通过使用原始
1 | var dup = { a: orig.a, b: orig.b, c: orig.c }; //Deep copy! |
现在,如果您更改