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;
}

typescript或javascript深拷贝Object json相关推荐

  1. js 对象深拷贝_这一次,彻底理解JavaScript深拷贝

    导语 这一次,通过本文彻底理解JavaScript深拷贝! 阅读本文前可以先思考三个问题: JS世界里,数据是如何存储的? 深拷贝和浅拷贝的区别是什么? 如何写出一个真正合格的深拷贝? 本文会一步步解 ...

  2. typescript浅拷贝与深拷贝

    浅拷贝与深拷贝的个人理解: 假设B去拷贝A的内容. 浅拷贝:B与A共用同一个内存地址,读取的值都指向同一块内存地址,所以无论A还是B对值进行修改,最终改的是内存地址里面的值,即改了A,B同时值也会改变 ...

  3. 4种JavaScript深拷贝的方法

    浅拷贝与深拷贝 浅拷贝是创建一个新对象,这个对象有着原始对象属性值的拷贝.如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的是内存地址 . 如果不进行深拷贝,其中一个对象改变了对象 ...

  4. javascript eval和JSON之间的联系

    eval函数的工作原理 eval函数会评估一个给定的含有JavaScript代码的字符串,并且试图去执行包含在字符串里的表达式或者一系列的合法的JavaScript语句.eval函数将把最后一个表达式 ...

  5. Python和JavaScript之间的JSON日期时间

    本文翻译自:JSON datetime between Python and JavaScript I want to send a datetime.datetime object in seria ...

  6. 在JavaScript中解析JSON? [重复]

    本文翻译自:Parse JSON in JavaScript? [duplicate] This question already has answers here : 这个问题已经在这里有了答案 : ...

  7. javascript对象和json字符串之间转换的问题

    在开发中,当使用ajax向后端发送请求返回一个json时,有两个可能,一种是返回json字符串,一种是返回object. javascript中有两个方法可以用来处理两者之间的互相转换问题: JSON ...

  8. Json学习总结(1)——Java和JavaScript中使用Json方法大全

    2019独角兽企业重金招聘Python工程师标准>>> 摘要:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript ...

  9. JavaScript对象、JSON对象、JSON字符串的区别

    一.首先看下什么是JSON JSON:JavaScript Object Natation,JavaScript对象的表现形式,已经发展成一种轻量级的数据交换格式. JavaScript对象的表现形式 ...

最新文章

  1. 犀利的 JavaScript
  2. 多个Activity与Fragment之间的数据传递
  3. C语言天才!想法奇异?还是逼格满满?一份国外C语言写的传奇简历
  4. 易语言操作php文本文件,易语言对文本操作的步骤教学
  5. 主机屋linux怎么连,全网最详细的samba文件共享服务!
  6. 删除visual studio最近打开的项目列表
  7. consul命令行查看服务_Go语言微服务架构实战:第十三节 微服务管理--Docker安装及运行consul节点...
  8. Spring 静态代理+JDK动态代理和CGLIB动态代理
  9. python输出重定向_使用Python子进程重定向标准输出到标准输入...
  10. asp.net生成店铺推广二维码,二维码中间加logo(源码)
  11. Matlab Gramm绘图工具箱
  12. 在Linux中打印常用书信与信封(转)
  13. rust哪家服务器便宜稳定,rust服务器选择
  14. 六 详细讲解主进程和渲染进程
  15. win10无法正常弹出移动硬盘/U盘
  16. 8_gin日拱一足---异步和同步
  17. android手机电池寿命,安卓手机如何查电池使用寿命
  18. RBP系统管理之系统用户管理
  19. 如何看懂k线图:K线详细分析图解
  20. Linux常用命令——pmap命令

热门文章

  1. Qt中绑定信号槽之后,信号槽无效
  2. Nmap渗透测试详解(一)
  3. html 响应式布局 九宫格,两种方法实现响应式九宫格布局
  4. php开发视频播放顺序,请问关于php代码运行顺序问题
  5. 换发型算法_GitHub - fredliu168/yry: yry(颜如玉)—— 一个实现人脸融合的算法,可以接近腾讯天天P图疯狂变脸功能的效果...
  6. dbnetlib sqlserver不存在或拒绝访问_404:对不起,您访问的网页不存在
  7. java setpaintmode 用法_详解Paint的各种set方法
  8. java super关键字简述
  9. java堆外内存溢出_JVM 案例 - 堆外内存导致的溢出错误
  10. 【JAVA基础篇】基本数据类型及自动类型转换