带有嵌套数组的绝对无引用的数组复制

2023-12-21

起初我以为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(使用前将#替换为@)

带有嵌套数组的绝对无引用的数组复制 的相关文章

随机推荐