定義一個深拷貝函式 接收目標target引數
阿新 • • 發佈:2022-04-11
平時的業務中經常用到深拷貝array或object,很少會拷貝函式的。最近有個專案用到所以分享給大家
const deepClone = (target) => {
// 定義一個變數
let result;
// 如果當前需要深拷貝的是一個物件的話
if (typeof target === 'object') {
// 如果是一個數組的話
if (Array.isArray(target)) {
result = []; // 將result賦值為一個數組,並且執行遍歷
for (let i in target) {
// 遞迴克隆陣列中的每一項
result.push(deepClone(target[i]))
}
// 判斷如果當前的值是null的話;直接賦值為null
} else if(target===null) {
result = null;
// 判斷如果當前的值是一個RegExp物件的話,直接賦值
} else if(target.constructor===RegExp){
result = target;
}else {
// 否則是普通物件,直接for in迴圈,遞迴賦值物件的所有值
result = {};
for (let i in target) {
result[i] = deepClone(target[i]);
}
}
// 如果不是物件的話,就是基本資料型別,那麼直接賦值
} else {
result = target;
}
// 返回最終結果
return result;
}