typescript或javascript深拷贝Object json

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wf19930209/article/details/84635951

typescript或javascript深拷贝Object json

Object的json对象很多时候我们需要深拷贝,我写了两个工具函数,供大家参考。

deepCopyObject

深拷贝一个Object对象,返回深复制的对象。

/**
* @method 深复制一个json对象
* @param source 需要深复制的对象
* @return 返回一个新的json对象
* @author vincent 2018-11-29
* @version 0.0.0
* @example
* @log 1. vincent,2018-11-29, func、date、reg 和 err 类型不能正常拷贝
*/
export function deepCopyJson(source: Object): Object {
    const newObject = {};
    for (const key of Object.keys(source)) {
        newObject[key] = typeof source[key] === 'object' ? deepCopyJson(source[key]) : source[key];
    }
    return newObject;
}

mergeObject

合并两个对象,将dest合并到source中,修改source中的属性值,不会修改dest中的属性值。

/**
* @method 合并json对象,遇到相同元素级属性,以source为准
* @param source 被合并的json对象
* @param dest json对象,将此json的属性递归赋值给source
* @return void 不返还新的值而是直接改变source
* @author vincent 2018-12-01
* @version 0.0.0
* @example
* @log 1. vincent,2018-12-01,创建
*/
export function mergeJson(source: Object, dest: Object): void {
    for (const key of Object.keys(dest)) {
        if (source[key] === undefined) {  // 不冲突的,直接赋值
            source[key] = dest[key];
            continue;
        }
        // 冲突了,如果是Object,看看有么有不冲突的属性
        // 不是Object 则以main为主,忽略即可。故不需要else
        if (isJson(dest[key])) {
            // arguments.callee 递归调用,并且与函数名解耦
            mergeJson(source[key], dest[key]);
        }
    }
}

/**
* @method 是否是json对象
* @param target 需要被判断的类型
* @return 如果是json对象返回 true,如果不是返回 false
* @author vincent 2018-12-01
* @version 0.0.0
* @example
* @log 1. vincent,2018-12-01,创建
*/
export function isJson(target): boolean {
    return typeof target === 'object' && target.constructor === Object;
}

猜你喜欢

转载自blog.csdn.net/wf19930209/article/details/84635951