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.pswp.cn/news/536061.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536061.shtml
英文地址,請注明出處:http://en.pswp.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…