[面試] 手寫題-淺拷貝,深拷貝

淺拷貝

 // 淺拷貝
function shallow(obj) {const newObj = {}for (const key in obj) {// 保證 key 不是原型的屬性if (obj.hasOwnProperty(key)) {newObj[key] = obj[key]}}return newObj
}

深拷貝

遞歸 O(n^2)
 // 深拷貝
function deepClone(obj = {}) {// 如果傳入的是 null,直接返回 nullif (obj === null) return null// 如果不是對象類型(如 number、string 等基本類型),直接返回原值(無需拷貝)if (typeof obj !== "object") return obj// 初始化返回結果let result = Array.isArray(obj) ? [] : {}for (let key in obj) {// 保證 key 不是原型的屬性if (obj.hasOwnProperty(key)) {// 遞歸調用!!!result[key] = deepClone(obj[key])}}return result
}
遞歸+Map,防止循環引用
 // 深拷貝
function deepClone(obj = {}, map = new Map()) {// 如果傳入的是 null,直接返回 nullif (obj === null) return null// 如果不是對象類型(如 number、string 等基本類型),直接返回原值(無需拷貝)if (typeof obj !== "object") return obj// 防止循環引用:如果當前對象已經在 map 中存在,則返回之前拷貝的結果if (map.has(obj)) return map.get(obj)// 初始化返回結果let result = Array.isArray(obj) ? [] : {}// 將當前原始對象與拷貝對象建立映射關系,防止后續遞歸中重復拷貝造成死循環map.set(obj, result)for (let key in obj) {// 保證 key 不是原型的屬性if (obj.hasOwnProperty(key)) {// 遞歸調用!!!result[key] = deepClone(obj[key])}}return result
}

手寫深拷貝【JS面試題】視頻

js【詳解】深拷貝 (含 JSON.parse(JSON.stringify(obj)) 的缺陷,5種手寫深拷貝)

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

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

相關文章

BehaviorTree.ROS2安裝記錄

坑比庫, 首先 git clone https://github.com/BehaviorTree/BehaviorTree.ROS2.git 依賴 git clone https://github.com/PickNikRobotics/cpp_polyfills.git git clone https://github.com/PickNikRobotics/RSL.git git clone https://github.com/PickNikRobotics/…

Vue基礎(19)_Vue內置指令

我們學過的vue內置指令: v-bind:單向綁定解析表達式,可簡寫為::xxx v-model:雙向數據綁定 v-for:遍歷數組/對象/字符串 v-on:綁定事件監聽,可簡寫為 v-if:條件渲染(動態控…

排列組合初步

什么是排列組合 排列組合是計數問題,順序不同且值相同算兩種方案是排列,順序不同且值相同算一種方案是組合。 暴力枚舉方案能算出方案數,太耗時,運用加法原理和乘法原理可降低時間復雜度。先將原問題拆解成子問題,根…

SQL調優方案對比與最佳實踐

問題背景介紹 在大型互聯網或企業級應用中,數據庫往往成為系統性能的瓶頸。隨著數據量和并發量的增長,單一的 SQL 查詢可能出現響應遲緩、鎖等待、全表掃描等性能問題。為保證系統的穩定性和用戶體驗,需要對 SQL 查詢做深入的調優。常見的調…

Terraform Helm:微服務基礎設施即代碼

🚀 Terraform & Helm:微服務基礎設施即代碼 📚 目錄 🚀 Terraform & Helm:微服務基礎設施即代碼1. 引言 🚀2. 環境與依賴 🧰3. 架構示意 🏗?4. Terraform 定義云資源 &…

清理 Docker 緩存占用

Docker 緩存主要包括未使用的鏡像、容器、卷和網絡等資源。清理緩存可以提高磁盤空間,線上升級次數比較多的話,服務器中Docker緩存會非常嚴重,做下清理瘦身會有意想不到的效果 清理未使用的鏡像 運行以下命令刪除未被任何容器引用的鏡像&…

深入解析NumPy的核心函數np.array()

深入解析NumPy的核心函數np.array NumPy與np.array()簡介NumPy的重要性np.array()的作用 np.array()函數的詳細參數object參數dtype參數copy參數order參數subok參數ndmin參數like參數 np.array()函數的使用示例創建基本的一維和二維數組創建具有特定數據類型的數組創建多維數組…

定時器的設計

定時器 定時器原理如何理解定時器定時器數據結構選取定時器觸發方式 定時器的實現 定時器原理 如何理解定時器 定時器在日常通常被描述為組織大量延時任務的模塊,其實從字面意思去理解的話,他就是去處理延時任務的,那么什么是延時任務呢&am…

大模型-分布式論文一瞥

1分離式架構 1.1 DistServe DistServe: Disaggregating Prefill and Decoding for Goodput-optimized Large Language Model Serving DistServe: Disaggregating Prefill and Decoding for Goodput-optimized Large Language Model Serving 講的是一個將prefill和decoding分…

02.SpringBoot常用Utils工具類詳解

文章目錄 1. BeanUtils詳解1.1 什么是BeanUtils?1.2 主要的BeanUtils實現1.2.1 Spring BeanUtils1.2.2 Apache Commons BeanUtils1.2.3 其他實現 1.3 Spring BeanUtils詳細使用1.3.1 基本用法1.3.2 指定忽略屬性1.3.3 批量拷貝(列表轉換) 1.4…

Golang快速開發框架——項目立項與系統配置讀取組件viper(一)

Golang快速開發框架——項目立項與系統配置讀取組件viper(一) 背景 知識分享之Golang篇是我在日常使用Golang時學習到的各種各樣的知識的記錄,將其整理出來以文章的形式分享給大家,來進行共同學習。歡迎大家進行持續關注。 知識分…

打造可觀測的 iOS CICD 流程:調試、追蹤與質量保障全記錄

隨著iOS項目復雜度增加,團隊越來越依賴自動化構建、自動化測試等CI/CD流程來保證產品質量。但CI/CD環境下,很多線下調試手段無法直接使用,比如: 無法手動連真機跑Instruments測試包只在分發后才能拿到崩潰模擬器上表現和真機不一…

C++11中 <cinttypes>的入門與精通

文章目錄 一、<cinttypes> 是什么1. 固定寬度的整數類型2. 整數操作函數3. 格式化輸入輸出宏 二、深入理解 <cinttypes>1. 固定寬度整數類型的使用2. 整數操作函數的使用3. 格式化輸入輸出宏的使用 三、實踐和技巧1. 使用固定寬度整數類型的最佳實踐2. 使用整數操作…

Pytorhc Lightning進階:一篇實例玩轉Pytorhc Lightning 讓訓練更高效

Pytorhc Lightning進階&#xff1a;一篇實例玩轉Pytorhc Lightning 讓訓練更高效 Pytorhc Lightning 主要包含以下幾大類&#xff0c;主要圍繞以下講解&#xff1a; 模型&#xff0c;PyTorch Lightning 的核心是繼承 pl.LightningModule數據&#xff0c;數據模塊繼承pl.Light…

大模型算法面試筆記——注意力Transformer流程/面試題篇

學習資料來源于字母站大學 1 Transformer架構 基于編碼器-解碼器的架構來處理序列對。跟使用注意力的seq2seq不同&#xff0c;Transformer是基于純注意力。 2 注意力 2.1 自注意力機制 使用注意力&#xff1a;需要根據整個序列進行預測&#xff0c;對于同一input&#xf…

Rust 定義與實例化結構體

文章目錄 Rust 定義與實例化結構體5.1 結構體的定義與意義5.2 結構體實例化5.2.1 基本實例化5.2.2 可變性規則5.2.3 字段初始化簡寫5.2.4 結構體更新語法 5.3 特殊結構體類型5.3.1 元組結構體&#xff08;Tuple Struct&#xff09;5.3.2 類單元結構體&#xff08;Unit-Like Str…

ELK日志分析系統(filebeat+logstash+elasticsearch+kibana)

一、ELK 平臺介紹 1、ELK 概述 日志主要包括系統日志、應用程序日志和安全日志。系統運維和開發人員可以通過日志了解服務器軟硬件信息、檢查配置過程中的錯誤及錯誤發生的原因。經常分析日志可以了解服務器的負荷&#xff0c;性能安全性&#xff0c;從而及時采取措施糾正錯誤。…

JS基礎4—jQuery

jQuery常用內容 jQuery 介紹jQuery 獲取方式基本選擇器 (最常用)層級選擇器 (基于元素間關系)過濾選擇器 (基于特定條件) jQuery事件綁定jQuery 方法調用jQuery遍歷jQuery 獲取與設置jQuery 添加與刪除jQuery CSS 類jQuery - AJAX 總結 jQuery 介紹 jQuery 是一個輕量級、快速…

時鐘周期是什么?

時鐘周期&#xff08;Clock Cycle&#xff09;是什么&#xff1f; 時鐘周期&#xff08;Clock Cycle&#xff09;是計算機系統中一個最基礎的時間單位&#xff0c;也稱為時鐘節拍或時鐘周期時間&#xff08;Clock Period&#xff09;。它由系統時鐘發生器產生的一個周期性脈沖…

如何用SEO優化長尾關鍵詞?

內容概要 在SEO優化領域&#xff0c;長尾關鍵詞扮演著至關重要的角色&#xff0c;它們能有效提升網站在搜索引擎中的可見度和流量轉化率。本文將全面解析如何通過系統方法優化長尾關鍵詞&#xff0c;涵蓋從基礎理論到實戰應用的完整流程。核心內容包括利用專業工具進行關鍵詞挖…