在開發過程中很多時候需要對多層級數組或者對象中的某一些數據做特殊處理,但是簡單的重新賦值會改變原來的對象,所以處理起來就很麻煩。簡單的淺拷貝就滿足不了我們的需求了。當然 ES6 提供了深拷貝的方法JSON.stringify() 和JSON.parse() ,基於實際的開發經驗,我也有自己的深拷貝的方法:
// 深拷貝
function deepCopy(obj) {
var result = Array.isArray(obj) ? [] : {};
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
if (typeof obj[key] === 'object' && obj[key]!==null) {
result[key] = deepCopy(obj[key]); //遞歸複製
} else {
result[key] = obj[key];
}
}
}
return result;
}
看完代碼你會發現,運用了遞歸,沒錯就是運用遞歸,在複雜的數組對象,不管層次有多深口可以實現深拷貝。