起初我以为arr.slice(0)
正在做一个deep未引用的副本,但它实际上只是做了一个shallow未引用的副本,因此如果数组包含嵌套数组,他们仍然被引用 https://stackoverflow.com/questions/10458356/unreferenced-array-not-so-unreferenced-after-slice:
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]
(example source) https://stackoverflow.com/a/10458391/908879
当您知道数组的结构时(只需.slice(0)
再次使用嵌套数组就可以解决问题),但如果您不知道嵌套数组的结构,事情就会变得复杂。
My first idea is to loop on the whole thing, on all levels, until it fails to find an array object.
- 这种方法可以接受吗?
- 是否有一些我缺少的内置功能?
我简直不敢相信我需要做这一切只是为了复制一个愚蠢的数组
就像 nonnb 所建议的那样,序列化/反序列化循环将导致深度复制。你可以这样做:
//a is some array with arbitrary levels of nesting.
var c = JSON.parse(JSON.stringify(a));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)