昨天分享了物件的淺拷貝實作方式,用了 JavaScript ES6 的展開運算符來將陣列做複製。
接下來研究的是,當遇到深層物件(多層級)的狀況時要怎麼去處理拷貝問題呢?書上介紹的最簡單方式是用 JSON.stringify
將物件轉換成字串後,再透過 JSON.parse()
轉回物件格式。
但是,如果巢狀物件中包含 Date
物件,這種方法就不適用了。因為 JSON.stringify
會將 Date
物件轉換成字串,這樣在使用 JSON.parse()
轉回物件時,Date
物件就會丟失其原有的功能。
針對這種情況,可以使用第三方的深拷貝函式庫,例如 lodash
的 cloneDeep
方法,來處理包含 Date
的巢狀物件。
const _ = require('lodash');
const originalObject = {
name: "John",
dateOfBirth: new Date()
};
const deepCopiedObject = _.cloneDeep(originalObject);