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
?
答案 0 :(得分:0)
你可以实现一个小的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;
}