在开发过程中很多时候需要对多层级数组或者对象中的某一些数据做特殊处理,但是简单的重新赋值会改变原来的对象,所以处理起来就很麻烦。简单的浅拷贝就满足不了我们的需求了。当然 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;
}
// 深拷贝 方法二
function(obj) {
return JSON.parse(JSON.stringify(obj))
}
看完代码你会发现,运用了递归,没错就是运用递归,在复杂的数组对象,不管层次有多深口可以实现深拷贝。