gpt4 book ai didi

javascript - 如何深度复制包含集合的 JavaScript 对象

转载 作者:行者123 更新时间:2023-11-28 04:51:46 25 4
gpt4 key购买 nike

使用 jQuery 深度复制
var objCopy = jQuery.extend(true, {}, obj);

非常适合
var obj = {str: "text", num: 2, arr: [1, 2, 3]}

但是对于
var obj = {str: "text", num: 2, set: new Set([1,2,3])}?

我发现对 obj.set 进行更改也会更改 objCopy.set
有没有办法深入到 obj 内部的集合并将其深拷贝分配给 objCopy

最佳答案

您可以实现一个小的copy函数,该函数将在存在集合时处理它。

function myCopy(obj) {
obj = jQueryDeepCopierOfObject(obj); // Deep copy it here

for (let prop in obj)
if (obj.hasOwnProperty(prop))
if (Set.prototype.isPrototypeOf(obj[prop]))
obj[prop] = new Set(obj[prop]);

// hoping there won't be any object in the set.
return obj;
}

示例:

var a = { a: "foo",  b: "bar", 
c: "baz", set: new Set() };

a.set.add("fox");
a.set.add("bat");
a.set.add("wisdom");

var b = mycopy(a);

console.log("a === b: ", a === b); // → false
console.log("a.set === b.set: ",
a.set === b.set); // → false

b.set.add("kindness");

console.log("set a has kindness: ",
a.set.has("kindness")); // → false
console.log("set b has kindness: ",
b.set.has("kindness")); // → true

function mycopy(obj) {
obj = Object.assign({}, obj);

for (let prop in obj)
if (obj.hasOwnProperty(prop))
if (Set.prototype.isPrototypeOf(obj[prop]))
obj[prop] = new Set(obj[prop]);

return obj;
}

关于javascript - 如何深度复制包含集合的 JavaScript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42863185/

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