由于JS引用类型赋值时传递的是内存地址,这会导致改变其中一个变量值后,其它相关变量也会跟着改变。如果要改变这种现象,使得赋值后的两个变量不再有所关联。就需要用深拷贝方式赋值。
深拷贝是使用递归方式,遍所有引用类型并拷贝所有值类型,最终得到一个内容相同的全新引用类型数据。
代码如下 :
function deepCopy(data) {
if (data === null || typeof data != "object") {
return data;
}
if (data instanceof Array) {
let _rdata = [];
for (let i = 0; i < data.length; i++) {
const element = data[i];
_rdata.push(deepCopy(element));
}
return _rdata;
}
else {
let _rdata = {};
for (const key in data) {
const element = data[key];
_rdata[key] = deepCopy(element);
}
return _rdata;
}
}