@web-map-service/map2d-app
Version:
基于openlayer的2D地图应用
54 lines (43 loc) • 1.53 kB
text/typescript
export function simpleDeepCopy(data: object) {
return JSON.parse(JSON.stringify(data))
}
export function deepCopy(target: any, hash = new WeakMap()) {
// 处理原始类型(number/string/boolean/null/undefined/Symbol)
if (target === null || typeof target !== 'object') {
return target;
}
// 处理日期对象
if (target instanceof Date) {
return new Date(target);
}
// 处理正则对象
if (target instanceof RegExp) {
return new RegExp(target);
}
// 处理循环引用(关键:用WeakMap记录已拷贝对象)
if (hash.has(target)) {
return hash.get(target);
}
// 处理数组和普通对象(获取构造函数,兼容自定义对象)
const cloneTarget = new target.constructor();
// 记录已处理对象(避免循环引用)
hash.set(target, cloneTarget);
// 递归拷贝对象属性(处理数组和对象)
if (Array.isArray(target)) {
target.forEach((item, index) => {
cloneTarget[index] = deepCopy(item, hash);
});
} else {
// 处理对象自身可枚举属性(忽略原型链属性)
Object.keys(target).forEach(key => {
cloneTarget[key] = deepCopy(target[key], hash);
});
}
return cloneTarget;
}
export function isDef<T>(data: T | undefined | null): data is T {
return data !== undefined && data !== null
}
export function isUnDef(data: any): data is undefined | null {
return data === undefined || data === null
}