CMS有很多过滤筛选项,需要对树形结构的对象进行备份
1、原生递归赋值
function deepClone(obj) {
let res = null;
// 我们只对数组,对象进行判断
if (Array.isArray(obj)) {
res = [];
}
if (Object.prototype.toString.call(obj) === "[object Object]") {
res = {};
}
if (Object.prototype.toString.call(obj) === "[object Object]" || Object.prototype.toString.call(obj) === "[object Array]") {
for (i in obj) {
// 在确定是数组还是对象的时候用for in 循环
// console.log(obj[i]); // 这个无论是数组还是对象都能够获得他具体的值,之后再对它进行判断
if (Object.prototype.toString.call(obj[i]) === "[object Object]" || Object.prototype.toString.call(obj[i]) === "[object Array]") {
res[i] = deepClone(obj[i]);
} else {
// 不是数组也不是对象可以直接赋值
res[i] = obj[i];
}
}
} else {
// 请传入需要copy的数组或对象
}
return res;
}
2、转字符串:缺点是如果里面是函数,就不能用这个方法
function deepClone(obj) {
return JSON.parse(JSON.stringify(obj));
}
3、其他的浅copy
Object.assign(target, sources);
// ES的展开运算符
let b = [...a];
都属于浅copy