我有一个像这样结构的数组,我正在尝试获取它的副本(以修改并用于 React setState())。在 Python 中,我可以使用 copy.deepcopy() 但我找不到在 JavaScript 中执行此操作的简单方法。
notes=[
{
contents: "Hello World 1",
function: console.log,
children: [
{
contents: "Hello World A",
function: console.log,
children: []
},
]
},
{
contents: "Hello World 2",
function: console.log,
children: []
}
]
我在 stackoverflow 上找到了这篇文章和类似的解决方案,但它们都不适合我。 https://medium.com/@Farzad_YZ/3-ways-to-clone-objects-in-javascript-f752d148054d 两种解决方案都只是浅拷贝,并且 JSON.parse 不适用于函数。
我想要一个函数,可以深度复制包含任何嵌套 JavaScript 数据类型的任意结构的数组或对象。
我不想重新发明轮子,编写复杂的递归函数来遍历和克隆所有内容,有没有现有的解决方案?
最佳答案
编辑-您可以使用下面的解决方案或仅导入 Lodash 并使用此 https://lodash.com/docs/#cloneDeep
<小时/>我正在用我找到的解决方案回答我自己的问题。有人在我链接的文章的评论部分发布了此内容,它似乎有效
notes=[
{
contents: "Hello World 1",
function: console.log,
children: [
{
contents: "Hello World A",
function: console.log,
children: []
},
]
},
{
contents: "Hello World 2",
function: console.log,
children: []
}
]
function deepCopy(src) {
let target = Array.isArray(src) ? [] : {};
for (let key in src) {
let v = src[key];
if (v) {
if (typeof v === "object") {
target[key] = deepCopy(v);
} else {
target[key] = v;
}
} else {
target[key] = v;
}
}
return target;
}
关于JavaScript 深度复制包含嵌套对象、数组和函数的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53273218/