深淺拷貝?

一、定義:

淺拷貝:只復制對象的第一層屬性,若第一層屬性是引用類型(如對象、數組),則復制其內存地址,修改拷貝后的嵌套對象會影響原對象。

深拷貝:遞歸復制對象的所有層級,生成完全獨立的副本

二、淺拷貝實現

1.Object.assign()
const obj = { a: 1, b: { c: 2 } }; 
const clone = Object.assign({}, obj); // 淺拷貝 
clone.b.c = 3; // 原對象的 b.c 也會變為 3 
console.log("obj: ", obj) 
console.log("clone: ", clone)

2.展開運算符
const arr = [1, 2, 3]; 
const newArr = [...arr]; // 淺拷貝 
newArr[2] = 4; 
console.log("arr: ", arr) 
console.log("newArr: ", newArr)

const arr = [1, 2, { a: 3 }]; 
const newArr = [...arr]; // 淺拷貝 
newArr[2].a = 4; // 原數組的 { a: 3 } 變為 { a: 4 } 
console.log("arr: ", arr) 
console.log("newArr: ", newArr)

3.數組方法:slice, concat

slice:

const arr = [1, 2, { a: 3 }]; 
const newArr = arr.slice(); // 淺拷貝 
newArr[2].a = 4 
console.log("arr: ", arr) 
console.log("newArr: ", newArr)

concat:

const arr = [1, 2, { a: 3 }]; 
const newArr = arr.concat(); // 淺拷貝 
newArr[2].a = 4 
console.log("arr: ", arr) 
console.log("newArr: ", newArr)

三、深拷貝

1.JSON 方法
const obj = { a: 1, b: { c: 2 } }; 
const clone = JSON.parse(JSON.stringify(obj)); // 深拷貝 
clone.b.c = 4 
console.log("obj", obj) 
console.log("clone", clone)

2.第三方庫

// Lodash 
const _ = require('lodash'); 
const clone = _.cloneDeep(obj);

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

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

相關文章

MMA: Multi-Modal Adapter for Vision-Language Models論文解讀

abstract 預訓練視覺語言模型(VLMs)已成為各種下游任務中遷移學習的優秀基礎模型。然而,針對少樣本泛化任務對VLMs進行微調時,面臨著“判別性—泛化性”困境,即需要保留通用知識,同時對任務特定知識進行微…

螞蟻集團 CTO 何征宇:AGI時代,海量數據帶來的質變|OceanBase 開發者大會實錄

5 月 17 日,“第三屆 OceanBase 開發者大會”在廣州舉辦,會中,螞蟻集團 CTO 何征宇,進行了題為《AGI時代,海量數據帶來的質變》的主題分享。他深度剖析了AI 時代下,數據應用范式的變革,以及生成…

python網絡爬蟲的基本使用

各位帥哥美女點點關注,有關注才有動力啊 網絡爬蟲 引言 我們平時都說Python爬蟲,其實這里可能有個誤解,爬蟲并不是Python獨有的,可以做爬蟲的語言有很多例如:PHP、JAVA、C#、C、Python。 為什么Python的爬蟲技術會…

網頁模板素材網站 web前端網頁制作模板

在當今數字化時代,Web 前端網頁制作對于企業和個人來說至關重要。無論是企業官網、個人博客還是電商網站,一個美觀、功能性強且易于維護的網頁設計能夠有效提升用戶體驗和品牌形象。然而,從零開始設計一個網頁往往需要耗費大量的時間和精力&a…

ROS系列(一):ROS入門指南 —— 核心解析與版本演進

引言 機器人操作系統(ROS)的誕生,不僅是一場技術革命,更是一張重新定義機器人開發范式的藍圖。從實驗室的原型驗證到工業場景的規模化落地,從單機智能到群體協作,ROS以開源、模塊化和生態驅動的特性&#…

將 Docker 鏡像推送到 GitLab Container Registry 的完整步驟

一、前提準備 GitLab 項目: 在 GitLab 上擁有一個項目,例如 your-group/your-project-name。重要: 確保項目路徑(尤其是項目名稱部分)全部使用小寫字母。例如,如果初始是 Your-Project,請在項目設置中將其路徑修改為 y…

Java-HashMap基礎與擴展學習總結

?面試官?: “HashMap 是 Java 中最常用的數據結構之一,你能說說它的底層實現嗎?比如哈希沖突是怎么解決的?” ?你?(結合源碼與優化場景): “好的,HashMap 底層是數組鏈表/紅黑…

嵌入式學習之系統編程(五)進程(2)

一、進程的退出 (一)僵尸進程與孤兒進程 (二)相關函數 1、exit函數 2、_exit函數 3、atexit函數 二、進程空間的回收(相關函數) 1、wait函數 2、waitpid函數 3、練習 4、exec族 5、system函數 一…

AI時代新詞-Transformer架構:開啟AI新時代的關鍵技術

一、什么是Transformer架構? Transformer架構 是一種基于自注意力機制(Self-Attention Mechanism)的深度學習模型架構,最初由Vaswani等人在2017年的論文《Attention Is All You Need》中提出。它主要用于處理序列數據&#xff08…

基于cornerstone3D的dicom影像瀏覽器 第二十三章 mpr預設窗值與vr preset

文章目錄 前言一、mpr窗口預設窗值二、vr preset三、調用流程 前言 實現mpr窗口預設窗值,vr窗口預設配色 效果如下: 一、mpr窗口預設窗值 可參考 第十五章 預設窗值 邏輯一樣的,把windowWidth, windowCenter值轉換為voiRange值,…

shell之通配符及正則表達式

通配符與正則表達式 通配符(Globbing) 通配符是由 Shell 處理的特殊字符,用于路徑或文件名匹配。當 Shell 在命令參數中遇到通配符時,會將其擴展為匹配的文件路徑;若沒有匹配項,則作為普通字符傳遞給命令…

繼電保護與安全自動裝置:電力系統安全的守護神

電力系統是現代社會賴以生存的基礎設施,而繼電保護和安全自動裝置則是保障電力系統安全穩定運行的守護神。 它們默默無聞地工作著,在電力系統出現異常時,能夠迅速準確地切除故障,防止事故擴大,保障電力供應。 那么&…

Flink流處理基礎概論

文章目錄 引言Flink基本概述傳統數據架構的不足Dataflow中的幾大基本概念Dataflow流式處理宏觀流程數據并行和任務并行的區別Flink中幾種數據傳播策略Flink中事件的延遲和吞吐事件延遲事件的吞吐如何更好的理解事件的延遲和吞吐flink數據流的幾種操作輸入輸出轉換操作滾動聚合窗…

Tomcat 使用與配置全解

一、 Tomcat簡介 Tomcat服務器是Apache的一個開源免費的Web容器。它實現了JavaEE平臺下部分技術規范,屬于輕量級應用服務器。 1. Tomcat版本 Tomcat版本 JDK版本 Servlet版本 JSP版本 10.0.X 8 and later 5.0 3.0 9.0.x 8 and later 4.0 2.3 8.0.x 7…

Unity3D仿星露谷物語開發52之菜單頁面

1、目標 創建菜單頁面,可通過Esc鍵開啟或關閉。 當把鼠標懸停在上面時它會高亮,然后當點擊按鈕時標簽頁會被選擇。 2、 創建PauseMenuCanvas (1)創建Canvas 在Hierarchy -> PersistentScene -> UI下創建新的Cavans命名為…

Spring Boot 調優的 12 個關鍵節點

數據庫連接池調優:精準匹配系統資源 癥狀: 默認配置下,連接池資源使用不當,高并發時連接耗盡或排隊。 常見誤區: spring:datasource:hikari:maximum-pool-size: 1000 # 設置過大connection-timeout: 30000 # 設置…

前端流行框架Vue3教程:28. Vue應用

28. Vue應用 應用實例 每個 Vue 應用都是通過 createApp函數創建一個新的 應用實例 main.js import {createApp} from vue import App from ./App.vue// app:Vue的實例對象 // 在一個Vue項目中,有且只有一個Vue的實例對象 const app createApp(App)/* 根組件選項…

MongoDB 數據庫遷移:完整指南與最佳實踐

在現代數據驅動的應用中,數據庫遷移是一項常見的任務,無論是升級 MongoDB 版本、更換服務器硬件,還是遷移到云環境(如 MongoDB Atlas),都需要一個可靠的遷移策略。錯誤的遷移方式可能導致數據丟失、應用停機…

MQTT-Vue整合

Vue整合 依賴環境 nodejs 版本 > 18安裝 element plus npm install element-plus安裝 mqtt npm install mqtt初始化Vue項目 使用 vite 創建項目 執行命令 npm create vitelatest輸入項目名稱 vue-mqtt-demo MQTT連接 連接組件代碼 components/MqttDemo.vue <script…

IP 地址反向解析(IP反查域名)原理與應用

一、IP 地址反向解析的原理與技術細節 IP 地址反向解析&#xff08;Reverse IP Lookup&#xff09;是一種將 IP 地址映射回其關聯域名或主機名的網絡技術&#xff0c;與常見的正向 DNS 解析&#xff08;將域名解析為 IP 地址&#xff09;形成互補。這一過程在網絡安全研究、漏…