object/deepClone.js

/**
 * 深度克隆
 * @author alvis <https://alvis.org.cn>
 * @category object
 * @alias yd_number_deepClone
 * @param {any} value 需要克隆的值
 * @returns {Any} 返回深度克隆值
 */
export default (value) => {
    // 缓存
    const cache = new Map();

    function _deepClone(value) {
        // 判断是否是对象,不是对象直接返回对应得值
        if (typeof value !== 'object' || value === null) {
            return value;
        }
        // 查看缓存中是否存在。缓存中存在,直接在缓存中取
        if (cache.has(value)) {
            return cache.get(value);
        }
        // 区分对象和数组
        const result = Array.isArray(value) ? [] : {};
        // 设置缓存
        cache.set(value, result);
        for (const key in value) {
            result[key] = _deepClone(value[key]);
        }
        return result;
    }
    return _deepClone(value);
};