JS实现深拷贝
- 思路:判断传入的类型,创建空数组或对象>>>创建myCopy用于递归调用,分析属性值或项的类型>>>如果值为基本类型值则返回,是对象或数组则递归调用myCopy进一步分析>>>返回拷贝的结果。
function deepCopy(obj) {
let copy = Object.prototype.toString.call(obj) === '[object Object]'? {} : [];
function myCopy(list) {
let result;
if (Object.prototype.toString.call(list) === '[object Object]') {
for(let key in list) {
result = {};
result[key] = myCopy(list[key]);
}
} else if (Object.prototype.toString.call(list) === '[object Array]') {
result = list.map(item => myCopy(item))
} else {
return list;
}
return result
}
copy = myCopy(obj);
return copy;
}
let myData = [{age: '0',data: [1,0,0]},1,2,3,[5,6,7]];
let copyData = deepCopy(myData);
copyData[0]['age'] = '666';
copyData[0]['data'][0] = 0;
copyData[4][0] = 6;
copyData[4][2] = 6;
console.log(myData,copyData);