UNPKG

luxi-record-utils

Version:
32 lines 1.19 kB
/* ** 简单的深拷贝 ** 基本数据类型,数组,日期,正则,函数 */ const simple = ['number', 'string', 'boolean', 'symbol', 'undefined'] export default function deepClone(target: any, map = new WeakMap()): any { let source: any const type = typeof target if (simple.includes(type)) { source = target return source } if (typeof (target) === 'function') return new Function(`return ${target.toString()}`)() if (typeof (target) === 'object' && target === null) return null if (Object.prototype.toString.call(target) === '[object Date]') return new Date(target) if (Object.prototype.toString.call(target) === '[object RegExp]') return new RegExp(target) source = Array.isArray(target) ? [] : {} if (map.get(target)) { return map.get(target) } map.set(target, source) for (let key in target) { if (target.hasOwnProperty(key)) { if (typeof target[key] === 'object') { source[key] = deepClone(target[key], map); } else { source[key] = target[key]; } } } return source }