gpt4 book ai didi

javascript - 我可以使用解构来创建深层复制吗?

转载 作者:行者123 更新时间:2023-11-30 19:23:39 25 4
gpt4 key购买 nike

基本上我想获得一个深拷贝,它不会使用解构来更改我的主要对象。

let a = {
name: 'lala',
testArray: [1,2,3],
object: {
name: 'object',
array: [4,5,6]
}
};

const {name, testArray, object} = a;

object.array = [...object.array, 0];
console.log(a.object.array);

let b = {
object2: {
name: 'object',
array: [4,5,6]
}
};

const object2 = {...b.object2};
object2.array = [...object2.array, 0];

console.log(b.object2.array);

我制作了一个 jsfiddle(为了更容易复制)提供我编写的代码。

https://jsfiddle.net/5z71Lbja/

问题是,当我使用第一种方法(解构)更改“子”对象时,主对象的数组也会更改。第二种方法效果很好,但我很好奇是否可以使用解构获得相同的结果。

最佳答案

你不能通过解构来创建新对象,不是。您只能挑选源中存在的值,无法对它们执行转换。 (您可以更改所使用的变量名称,但无法转换值。)我经常想这样做,但您不能(至少目前不能)。

有多种简单的方法可以做到这一点,但实际上最简单的方法是单独制作数组的浅拷贝。

一个更简单的例子:

const obj = {
foo: "bar",
array: [1, 2, 3]
};

const {foo} = obj;
const array = obj.array.slice(); // or: = [...obj.array];

obj.array[0] = "one";
console.log(obj.array[0]); // "one"
console.log(array[0]); // 1

关于javascript - 我可以使用解构来创建深层复制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57166214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com