數組和對象的深拷貝和淺拷貝的方法

數組和對象的深拷貝、淺拷貝方法有所不同,以下是常見的實現方式:

?

一、淺拷貝方法(數組和對象通用/專用)

?

淺拷貝只復制表層數據,嵌套的引用類型仍共享內存。

?

1. 數組的淺拷貝

?

- 擴展運算符(...):?const arrCopy = [...originalArr];?

- Array.prototype.slice():?const arrCopy = originalArr.slice();?

- Array.prototype.concat():?const arrCopy = [].concat(originalArr);?

?

2. 對象的淺拷貝

?

- 擴展運算符(...):?const objCopy = {...originalObj};?

- Object.assign():?const objCopy = Object.assign({}, originalObj);?

?

二、深拷貝方法(數組和對象通用/專用)

?

深拷貝會復制所有嵌套數據,原數據和拷貝數據完全獨立。

?

1. 通用方法(數組和對象均可)

?

- JSON.parse(JSON.stringify()):

簡單易用,但有局限性(不支持函數、Symbol、循環引用等)。

示例:?const deepCopy = JSON.parse(JSON.stringify(original));?

- 遞歸實現:

自定義函數遍歷所有屬性,對引用類型遞歸拷貝,可處理復雜場景。

示例:

function deepClone(obj) {

? if (obj === null || typeof obj !== 'object') return obj;

? let copy = Array.isArray(obj) ? [] : {};

? for (let key in obj) {

? ? if (obj.hasOwnProperty(key)) {

? ? ? copy[key] = deepClone(obj[key]);

? ? }

? }

? return copy;

}

?

?

2. 其他工具方法

?

- Lodash庫的_.cloneDeep():

成熟可靠,支持各種數據類型(推薦實際開發使用)。

示例:?const deepCopy = _.cloneDeep(original);?

?

總結

?

- 淺拷貝適合無嵌套的簡單數據,實現簡單(擴展運算符、slice等)。

- 深拷貝適合有嵌套引用類型的數據,復雜場景推薦用 Lodash 的 ?_.cloneDeep?,簡單場景可臨時用 ?JSON.parse(JSON.stringify())?(注意其局限性)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/89547.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89547.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89547.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【RK3576】【Android14】開發板概述

獲取更多相關的【RK3576】【Android14】驅動開發,可收藏系列博文,持續更新中: 【RK3576】Android 14 驅動開發實戰指南 1. 引言 RK3576處理器簡介: RK3576 是一顆高性能、低功耗的應用處理器芯片,專為ARM PC、邊緣計算…

凸優化課程學習筆記(一)

凸優化課程學習筆記(一) 課程:B站清華大學陳劍博士《凸優化基礎理論與應用》 優化理論概述 1. 優化序論 定義:凸優化是一門應用極為廣泛的學科,主要研究如何對決策問題進行最優選擇,探討最優解的性質,尋找高效的計算方法,并分析這些方法的理論基礎與實際應用表現。…

(四)OpenCV——特征點檢測與匹配

前言 特征點檢測與匹配是計算機視覺中的基礎技術,廣泛應用于圖像拼接、物體識別、三維重建、運動跟蹤等領域。OpenCV 提供了多種特征檢測與匹配算法的實現。 特征點檢測與匹配是計算機視覺中的核心技術,廣泛應用于多個領域。以下是其主要應用場景&…

if (a == 1 a == 2 a == 3)返回true的問題思考

引文: 無意中看到了這樣的非常規邏輯,在想前后端應該都可以實現,a 是變量,或者操作a時觸發了值得改變。 意義: 該問題讓我們知道了一切規則都是可以被打破的,世界上的規則都是為了解釋某種現象設計的。 題目…

MySQL的索引操作及底層結構淺析

一.索引提高數據庫的性能,索引是物美價廉的東西了。不用加內存,不用改程序,不用調sql,只要執行正確的 create index ,查詢速度就可能提高成百上千倍。但是天下沒有免費的午餐,查詢速度的提高是以插入、更新…

stm32f4 dma的一些問題

文章目錄前言一、使用開發板燒錄dma代碼不生效問題二、一個工程同時使用uart2、uart3借助dma來傳遞1.并行。2.DMA "同時工作"的本質3.總線訪問的具體含義4.實際效果5.最佳實踐5.1 總線傳輸機制:6.DMA傳輸中斷的問題總結前言 記錄一些使用stm32f4 dma過程…

登錄功能實現深度解析:從會話管理到安全校驗全流程指南

登錄功能實現深度解析:從會話管理到安全校驗全流程指南大家好,我是凱哥Java本文標簽:登錄驗證流程、過濾器與攔截器、安全防護措施簡介本文深入探討了從登錄功能實現到會話管理和安全校驗的全流程,包括參數校驗、身份驗證、令牌生…

2023 年 5 月青少年軟編等考 C 語言六級真題解析

目錄 T1. 字符串插入 思路分析 T2. 機器翻譯 思路分析 T3. 棧基本操作 思路分析 T4. 雙端隊列 思路分析 T1. 字符串插入 題目鏈接:SOJ D1138 有兩個字符串 s t r str str 和 s u b s t r substr substr, s t r str str 的字符個數不超過 10 10 10, s u b s t r substr …

Redux架構解析:狀態管理的核心原理

Redux 作為 JavaScript 應用的狀態管理庫,其技術架構與核心原理圍繞??可預測的狀態管理??設計,通過嚴格的單向數據流和函數式編程理念實現復雜應用的狀態控制。以下從設計理念、核心架構、工作流程、源碼實現等角度進行系統性剖析:一、設…

linux制作鏡像、壓縮鏡像、燒錄的方法

最近在玩香橙派的時候,需要搞多個板子,一個一個配環境也太麻煩了吧......于是通過搜索,發現可以把linux設備(比如香橙派,樹莓派等等)制作為鏡像,然后像燒錄官方鏡像一樣燒進新的sd卡&#xff0c…

機械材料計算軟件,快速核算重量

軟件介紹 今天為大家推薦一款專為機械行業設計人員打造的金屬材料重量計算軟件,幫助工程師快速完成材料重量核算。 軟件特點 這款綠色版計算工具體積小巧,不足100KB,無需安裝即可直接運行,不占用系統資源,特別適…

Chrome更新后,擴展不能用問題

Chrome更新后,擴展不能用問題 此擴展程序不再受支持,因此已停用 在 Windows 10/11 搜索框中輸入 regedit 打開 注冊表編輯器 在注冊表編輯器中打開:HKEYLOCALMACHINE\SOFTWARE\Policies\ 右鍵單擊 Policies 新建項 命名為 Google 右鍵單…

【Python】通過cmd的shell命令獲取局域網內所有IP、MAC地址,通過主機名獲取IP

【Python】通過cmd的shell命令獲取局域網內所有IP、MAC地址,通過主機名獲取IP 更新以gitee為準: gitee 文章目錄cmd命令獲取IPping主機名獲取IP的主機名socket獲取當前網關運行效果附錄:列表的賦值類型和py打包列表賦值BUG復現代碼改進優化總…

sky-take-out項目Mybatis的使用

分頁查詢public PageResult pageQuery(CategoryPageQueryDTO categoryPageQueryDTO) {PageHelper.startPage(categoryPageQueryDTO.getPage(),categoryPageQueryDTO.getPageSize());//下一條sql進行分頁&#xff0c;自動加入limit關鍵字分頁Page<Category> page categor…

H3CNE小小綜合實驗

實驗拓撲圖實驗需求 按照圖示配置IP地址在SW1和SW2之間配置鏈路聚合增加鏈路帶寬&#xff0c;提高可靠性PC5和PC6屬于VLAN10&#xff0c; PC7和PC8屬于VLAN20SW1和SW2屬于二層交換機&#xff0c;SW3為三層交換機&#xff08;VLAN100用于對接R4&#xff09;,在交換機之間相連的鏈…

IP協議深入理解

一、什么是ip協議?1.1、ip協議是網絡層協議&#xff0c;ip協議的本質工作是提供一種能力&#xff0c;把數據可靠的跨網絡從主機A送到主機B&#xff1b;1.2、什么是ip&#xff1f;ip目標網絡目標主機&#xff1b;畫圖圖解:如圖&#xff0c;當主機A想要把數據發給主機B時&#x…

接收表單數據:serialize()函數解析

一、form-serialize作用與引入 作用&#xff1a; form-serialize可以快速收集表單數據&#xff0c;按照使用者意愿轉化為對象或字符串輸出&#xff0c;以便于提交至服務器。 引入&#xff1a; form-serialize不是瀏覽器自帶的JS方法&#xff0c;而是第三方工具庫。可以直接通過…

vc配置使用預編譯

預編譯原理 stdafx.h中加入系統文件&#xff0c;減少cpp中對這些文件的解析&#xff0c;提高速度 stdafx.h 會把編譯的文件生成pch&#xff0c;后續解析頭文件直接調用pch里面的數據 配置 新建stdafx.h和stdafx.cpp文件 配置stdafx.cpp文件為/Yc 創建預編譯文件整個項目設置/Yc…

反射機制的登錄系統

一、實體層&#xff08;po層&#xff09; //UserInfo package com.hugeyurt.po;import java.sql.ResultSet; import java.sql.SQLException;public class UserInfo {private String userID;private String name;private int count;private Long errorTime;private String pwd;p…

裝飾器模式及優化

裝飾器模式&#xff08;Decorator Pattern&#xff09;是一種結構型設計模式&#xff0c;它允許向一個現有的對象添加新的功能&#xff0c;同時又不改變其結構。這種模式創建了一個裝飾器類&#xff0c;用來包裝原有的類&#xff0c;并在保持類方法簽名完整性的前提下&#xff…