疑问:Object.keys只能遍历对象的当前属性,像 Date 这种对象,并没有实现深拷贝
let obj = {
a: {
fn: function() {
console.log('fn');
},
a: {
a: {
a: [1, 2, 3],
b: 3,
c: [
{
a: {
a: [1, 2]
}
}
]
}
}
},
b: 1,
c: new Date()
};
function deepCope(obj) {
const ret = {};
const arr = [];
Object.keys(obj).forEach(k => {
if (typeof obj[k] === 'object' && obj[k] !== null) {
arr.push(obj[k]);
const length = arr.length;
ret[k] = arr[length ? length - 1 : length];
} else {
ret[k] = obj[k];
}
});
for (let i = 0; i < arr.length; i++) {
const item = arr[i];
Array.isArray(item) ? (arr[i] = []) : (arr[i] = {});
Object.keys(item).forEach(k => {
if (typeof item[k] === 'object' && item[k] !== null) {
arr.push(item[k]);
const length = arr.length;
arr[i][k] = arr[length ? length - 1 : length];
} else {
arr[i][k] = item[k];
}
});
}
return ret;
}
console.log('111', deepCope(obj));