招聘网站html模板,东莞政务网站建设方案,网站手机版方案,the_post wordpresstypescript或javascript深拷贝Object json
Object的json对象很多时候我们需要深拷贝,我写了两个工具函数,供大家参考。
deepCopyObject
深拷贝一个Object对象#xff0c;返回深复制的对象。
/**
* method 深复制一个json对象
* param source 需要深复制的对象
* return 返…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为主忽略即可。故不需要elseif (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;
}