Appearance
手写对象拷贝
深拷贝
- 最简单的方法就是JSON.parse(JSON.stringify())
js
function deepCopy(o) {
return JSON.parse(JSON.stringify(o))
}
function deepCopy(o) {
return JSON.parse(JSON.stringify(o))
}
1
2
3
2
3
TIP
需要注意的是:这种拷贝方法不可以拷贝一些特殊的属性(例如正则表达式,undefine,function)
- 用递归去复制所有层级属性
数组的map方法也算是
ts
function deepClone<T>(obj: T): T {
if (typeof obj !== "object" || obj === null) return obj;
const result: T = obj instanceof Array ? ([] as T) : ({} as T);
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
result[key] = deepClone(obj[key]);
}
}
return result;
}
const obj = {
a: 1,
b: {
bb: "hh"
},
c() {
console.log("cc");
}
};
const cloneObj = deepClone(obj);
obj.a = 999;
console.log("cloneObj :>> ", cloneObj);
console.log("obj :>> ", obj);
// cloneObj :>> { a: 1, b: { bb: 'hh' }, c: [Function: c] }
// obj :>> { a: 999, b: { bb: 'hh' }, c: [Function: c] }
const arr: Array<number | string> = [1, 2, 3, "6"];
const copyArr = deepClone(arr);
arr[3] = 4;
console.log("arr | copyArr :>> ", arr, copyArr); // arr | copyArr :>> [ 1, 2, 3, 4 ] [ 1, 2, 3, '6' ]
function deepClone<T>(obj: T): T {
if (typeof obj !== "object" || obj === null) return obj;
const result: T = obj instanceof Array ? ([] as T) : ({} as T);
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
result[key] = deepClone(obj[key]);
}
}
return result;
}
const obj = {
a: 1,
b: {
bb: "hh"
},
c() {
console.log("cc");
}
};
const cloneObj = deepClone(obj);
obj.a = 999;
console.log("cloneObj :>> ", cloneObj);
console.log("obj :>> ", obj);
// cloneObj :>> { a: 1, b: { bb: 'hh' }, c: [Function: c] }
// obj :>> { a: 999, b: { bb: 'hh' }, c: [Function: c] }
const arr: Array<number | string> = [1, 2, 3, "6"];
const copyArr = deepClone(arr);
arr[3] = 4;
console.log("arr | copyArr :>> ", arr, copyArr); // arr | copyArr :>> [ 1, 2, 3, 4 ] [ 1, 2, 3, '6' ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
浅拷贝
js
object.assign(target,source)
object.assign(target,source)
1