UNPKG

imdone-core

Version:
37 lines (29 loc) 896 B
export function cloneDeep(obj, seen = new WeakMap()) { if (obj === null || typeof obj !== 'object') return obj if (seen.has(obj)) return seen.get(obj) if (typeof obj === 'function') return obj if (obj instanceof Date) return new Date(obj) if (obj instanceof RegExp) return new RegExp(obj) if (obj instanceof Map) { const result = new Map() seen.set(obj, result) for (const [key, value] of obj.entries()) { result.set(cloneDeep(key, seen), cloneDeep(value, seen)) } return result } if (obj instanceof Set) { const result = new Set() seen.set(obj, result) for (const value of obj.values()) { result.add(cloneDeep(value, seen)) } return result } const result = Array.isArray(obj) ? [] : {} seen.set(obj, result) for (const key of Object.keys(obj)) { result[key] = cloneDeep(obj[key], seen) } return result }