ts实现深克隆
export const getObjType = (obj: Record<string, any>): any => {
const toString = Object.prototype.toString;
const map: Record<string, any> = {
"[object Boolean]": "boolean",
"[object Number]": "number",
"[object String]": "string",
"[object Function]": "function",
"[object Array]": "array",
"[object Date]": "date",
"[object RegExp]": "regExp",
"[object Undefined]": "undefined",
"[object Null]": "null",
"[object Object]": "object",
};
if (obj instanceof Element) {
return "element";
}
return map[toString.call(obj)];
};
export const deepClone = (data: any) => {
const type = getObjType(data);
let obj: any;
if (type === "array") {
obj = [];
} else if (type === "object") {
obj = {};
} else {
// 不再具有下一层次
return data;
}
if (type === "array") {
const len = data.length;
for (let i = 0; i < len; i++) {
data[i] = (() => {
if (data[i] === 0) {
return data[i];
}
return data[i];
})();
if (data[i]) {
delete data[i].$parent;
}
obj.push(deepClone(data[i]));
}
} else if (type === "object") {
for (const key in data) {
if (data) {
delete data.$parent;
}
obj[key] = deepClone(data[key]);
}
}
return obj;
};
js实现深克隆
export function deepClone(source) {
if (!source && typeof source !== 'object') {
throw new Error('error arguments', 'deepClone')
}
const targetObj = source.constructor === Array ? [] : {}
Object.keys(source).forEach(keys => {
if (source[keys] && typeof source[keys] === 'object') {
targetObj[keys] = deepClone(source[keys])
} else {
targetObj[keys] = source[keys]
}
})
return targetObj
}