起初我以为arr.slice(0)
是在做一个深度未引用的副本,但它实际上只是在做一个浅层的未引用副本,所以如果数组包含嵌套数组,它们仍然被引用:
var a = [1,2]
var b = [3,4]
var c = [a,b]
var d = c.slice(0)
d[0] === a // true, which means it is the /same/ object
d[0][0] = "Hi!"
a // ["Hi!", 2]
当您知道数组的结构时,提供的链接上的解决方案相当容易(只需.slice(0)
再次嵌套数组即可解决问题),但如果您不知道嵌套数组的结构如何,它会变得复杂。
我的第一个想法是在所有层面上循环整个事情,直到找不到大批目的。
- 这种方法可以接受吗?
- 是否有一些我缺少的内置功能?
我简直不敢相信我需要为复制一个愚蠢的数组做所有这些