typescript或javascript深拷贝Object json

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536061.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux安装zsh终端

linux安装zsh终端 ZSH 已经被收录到了 Ubuntu 18.04 LTS 的官方软件包存储库中了 sudo apt install zshZSH Shell 安装好之后,可以使用如下命令查看其版本: zsh --version取代bash,设为默认shell sudo usermod -s /bin/zsh username也可以…

HTML meta使用

HTML meta使用 meta标签是什么? meta标签是HTML语言head区的一个辅助性标签。 meta标签是干什么用的? meta标签用来描述一个HTML网页文档的属性,例如作者、日期和时间、网页描述、关键词、页面刷新等。它提供的信息虽然用户不可见&#x…

共享图片方案

共享图片方案 安装chrome插件 极简图床安装,链接地址 插件使用 使用阿里云 OSS 存储图片 阿里云 OSS 提供了安全、低成本、高可靠的云存储服务,极简图床针对阿里云 OSS 做了整合,通过简单的设置,即可方便地将图片上传到阿里…

javascript复制到黏贴板之完美兼容

javascript复制到黏贴板之完美兼容 很多时候我们需要给用户方便,提供一键复制的功能,但是在实现的过程中遇到各式各样的坑。 原生解决方案 document.execCommand()方法 MDN上的定义: which allows one to run commands to manipulate the contents of the edita…

制作windows启动盘-大于4GB镜像

制作windows启动盘-大于4GB镜像 制作一个 Windows 安装 U 盘是很容易的,使用 UltraISO 这样的刻录工具量产一个 iso 镜像文件到 U 盘即可。然而随着 Windows 10 版本号的提升,镜像变得越来越大,终于 FAT32 文件系统不再能够容纳得下安装镜像…

DIY 主机 所有AMD IntelCPU及主板

DIY 主机 所有AMD IntelCPU及主板 查看intel的cpu及amd的cpu或者对应的主板可以查看这个项目。diy-pc

PC介绍之电脑组成

电脑组成 CPU cpu就是中央处理器,英文为central processing unit。 CPU一般我们需要知道以下几点即可: 主频 CPU的主频,即CPU内核工作的时钟频率(CPU Clock Speed),通常所说的某某CPU是多少兆赫的&#xff…

PC介绍之PCIE、总线、内存、电源

PC介绍之PCIE、总线、内存、电源 PCIE降速 PCI-E的总线性能 目前我们所使用的显卡是x16 走 PCIE 3.0,有些显卡虽然插在x16的插槽上,但是速度只有x8的速度,总的来说好的显卡目前都是x16。 主板一般会提供一条x16,x8, x1三个插槽&#xff0c…

PC介绍之显卡

PC介绍之显卡 一、什么是显卡? 显示接口卡(Video card,Graphics card)、显示器配置卡简称为显卡,是个人电脑基本组成部分之一。 用途是将计算机系统所需要的显示信息进行转换驱动,并向显示器提供信号&…

Sublime Text 3 无法输入中文解决方案

Sublime Text 3 安装及无法输入中文解决方案 安装sublime-text 3 如果是ubuntu系统终端输入: wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add - sudo apt-get install apt-transport-https echo "deb https://download.…

Linux Server 安装 raid 1

Linux Server 安装 raid 1 两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,理论上读取速度等于硬盘数量的倍数,与RAID 0相同。另外写入速度有微小的降低。只要一个磁盘正常即可维持运作,可靠性最高。其原…

0-安装Vagrant和使用

0-安装Vagrant和使用 Vagrant 是一款软件,可以自动化虚拟机的安装和配置流程。用来管理虚拟机,如 VirtualBox、VMware、AWS等,主要好处是可以提供一个可配置、可移植和复用的软件环境,可以使用shell、chef、puppet等工具部署。所以…

安装 Docker Machine

安装 Docker Machine Docker Machine 支持 Windows ,OS X ,和 Linux,并且被安装为一个独立的二进制文件。用于各平台架构的二进制文件链接如下: Windows - 32bitWindows - 64bitOSX - x86_64OSX - (老款 macs)Linux - x86_64Linux - i386 github地址 O…

什么是分布式系统的CAP理论?

什么是分布式系统的CAP理论? 2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。之后,CAP理论正式成为分布式计算领域的公认定理。 …

什么是分布式系统的BASE理论?

什么是分布式系统的BASE理论? BASE理论 eBay的架构师Dan Pritchett源于对大规模分布式系统的实践总结,在ACM上发表文章提出BASE理论,BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency&a…

Docker教程介绍

Docker教程介绍 教程环境准备 linux 系统virtualbox 软件安装 教程介绍 0-安装Vagrant,安装 centos 系统。1-docker 介绍2-docker 安装3-docker 架构和底层技术简介4-什么是Image和container5-Dockerfile文件6-搭建一个私有registry7-深入练习Dockerfile8-容器操…

1-docker 介绍

1-docker 介绍 由PaaS到Container 2013年2月,前Gluster的CEO Ben Golub 和 dotCloud 的 CEO Solomon Hykes 坐在一起聊天时,Solomon谈到想把 dotCloud 内部使用的Container容器技术单独拿出来开源,然后围绕这个技术开一家新公司提供技术支持…

3-docker 架构和底层技术简介

3-docker 架构和底层技术简介 Docker Platform Docker 是一个平台。 提供了一个开发、打包、运行app的平台把app和底层 infrastructure 隔离开来 根据上图我们可以看出 Docker Engine 把上层的 app 应用程序和底层的物理设备或虚拟设备进行了隔离,然后我们在 doc…

4-什么是Image和container

4-什么是Image和container 什么是Image? 先练习一个例子: docker pull ubuntu:16.04 docker image ls # 查看镜像镜像类似于一个系统安装光盘,你可以使用一个安装光盘为多台电脑安装操作系统,同样,你也可以用同一个镜像构建多个运行的…

5-Dockerfile文件

5-Dockerfile文件 先练习一个例子: 创建 Dockerfile 文件 FROM ubuntu:14.04 LABEL maintainer"vincent <jeffmanwordgmail.com>" RUN apt-get update && apt-get install -y redis-server EXPOSE 6397 ENTRYPOINT [ "/usr/bin/redis-server&quo…