// 深拷贝对象
function deepAssignObject(…parm) {
let result = {};
parm.forEach(v => {
if (Reflect.toString.call(v) !== “[object Object]”) {
throw new Error(‘参数错误’);
}
Object.keys(v).forEach(key => {
switch (Reflect.toString.call(v[key])) {
case “[object Object]”:
result[key] = deepAssignObject(v[key]);
break;
case “[object Array]”:
result[key] = deepAssignArray(v[key]);
break;
default:
result[key] = v[key];
break;
}
});
});
return result;
}
// 深拷贝数组
function deepAssignArray(…parm) {
let result = [];
parm.forEach(v => {
if (Reflect.toString.call(v) !== “[object Array]”) {
throw new Error(‘参数错误’);
}
v.forEach(item => {
switch (Reflect.toString.call(item)) {
case “[object Object]”:
result.push(deepAssignObject(item));
break;
case “[object Array]”:
result.push(deepAssignArray(item))
break;
default:
result.push(item);
break;
}
});
});
return result;
}
spread operator(展开操作符)也适用于对象。用以下方法克隆对象:
const newObj = { ...oldObj }
const a = [1, 2, 3]
const b = [...a, 4, 5, 6]
const c = [...a]
(展开操作符)
您可以使用展开操作符 ... 展开数组,对象或字符串。
让我们从一个数组示例开始。查看以下内容:
没啥用啊 很多类型比如date还是浅克隆 能实现的功能和JSON.parse(JSON.stringify())差不多,问题循环结构还是炸了啊