淺克隆和深克隆的用法
淺克隆
定義:拷貝後的新物件的屬性和原物件中的屬性不會關聯,但是方法都指向同一個地址
es6剩餘引數解構
let b = {...obj}
Object.assign(複製方, 被複制方) 返回列舉後的新物件
let b = Object.assign({}, obj);
slice()切割
let b = obj.slice();
深克隆
定義:
拷貝一個新物件出來,但是新物件的地址和原物件的地址不一樣
任意一方修改資料不會影響另一方,只是剛開始拷貝過去屬性和方法長得一樣
let obj = { n: 1 };
遞迴 (原生)
function Deepclone(obj) {
let deepObj = Array.isArray(obj) ? [] : {};
// 1、判斷obj是否為基本資料型別object
if (obj && typeof obj === 'object') {
// 2、遍歷物件中的每個屬性
for (key in obj) {
if (obj.hasOwnProperty(key)) {
// 3、判斷obj中的key是否都為基本資料型別object
if (obj[key] && typeof obj[key] === 'object') {
// 4、是的話遞迴將每個key插入到deepObj中
deepObj[key] = Deepclone(obj[key])
} else {
// 5、不是的話等於他原來的樣子
deepObj[key] = obj[key]
}
}
}
}
// 6、最後把結果返回出去
return deepObj
}
let b = Deepclone(a); // { n: 1 }
外掛lodash
下載 npm i lodash
const _ = require('lodash');
let b = _.cloneDeep(obj); // { n: 1 }
JSON.parse和JSON.Stringify
let b = JSON.parse(JSON.Stringify(obj)); // { n: 1 }
相關文章
- vue陣列的深克隆和淺克隆Vue陣列
- java深克隆(深拷貝)和淺克隆(淺拷貝)Java
- js中深克隆與淺克隆JS
- 淺克隆深克隆舉例解讀
- 深入理解Java的淺克隆與深克隆Java
- js 淺拷貝(淺複製、淺克隆)、深拷貝(深複製、深克隆)JS
- JAVA 基礎 – clone淺克隆與深克隆Java
- 原生js實現物件的深克隆以及淺克隆JS物件
- js之物件深淺克隆JS物件
- 沒看這篇文章之前,我以為真的懂深克隆和淺克隆。
- JAVA設計模式 2【建立型】原型模式的理解與使用、理解淺克隆和深克隆Java設計模式原型
- 三目運算、物件克隆、深拷貝和淺拷貝物件
- js deep clone 深克隆JS
- 淺談克隆 JavaScriptJavaScript
- 什麼要使用克隆、如何實現克隆物件、序列化與反序列實現克隆的好處、深拷貝與淺拷貝物件
- clone 淺克隆帶來的問題
- 前端戰五渣學JavaScript——深克隆(深拷貝)前端JavaScript
- Javascript 繼承和克隆JavaScript繼承
- 面試官:請你實現一個深克隆面試
- JS型別判斷、物件克隆、陣列克隆JS型別物件陣列
- Rust克隆陷阱?Rust
- js 深度克隆JS
- 克隆專案
- javascript深度克隆JavaScript
- LeetCode 克隆圖LeetCode
- js物件的深度克隆!JS物件
- Java中的物件“克隆”Java物件
- 使用c#強大的表示式樹實現物件的深克隆C#物件
- windows賬號克隆Windows
- js深度克隆物件JS物件
- 物件如何深度克隆物件
- vue 對資料的克隆Vue
- 虛擬機器的克隆虛擬機
- Partclone:多功能的分割槽和克隆的自由軟體
- 2.10 克隆資料庫資料庫
- LeetCode-133-克隆圖LeetCode
- github克隆專案太慢Github
- JavaScript cloneNode() 克隆節點JavaScript