前言
这是我参与8月更文挑战的第1天,活动详情查看:8月更文挑战”
含有对象内嵌对象的深克隆
个人学习,仅供参考。
代码实现
const person = {
name: '程卓',
age: 21,
hobby: ['a', 'b'],
score: [
{ 'Chinese': 90 },
{ 'Math': 95 }
],
study: {
basis: ['HTML', 'CSS', 'JavaScript'],
frameWork: ['Vue', 'React']
},
phone: {
one: { '康佳': 'E830' },
tow: { '魅族': 'MX4 Pro' },
three: { '魅族': 'Pro7 Plus' },
four: { '魅族': '16s Pro' },
five: { '魅族': '18' },
}
}
function deepClone(origin, target) {
var tar = target || {} //如果有target就用,没有就用{}
for (var k in origin) {
if(origin.hasOwnProperty(k)) { //遍历对象自身的属性值,不能有原型上的属性值
if(typeof origin[k] === 'object' && origin[k] !== null){ //判断是否还为数组或对象,并且不能为空
tar[k] = Object.prototype.toString.call(origin[k]) === '[Object Array]' ? [] : {}
deepClone(origin[k], tar[k])
} else {
tar[k] = origin[k]
}
}
}
return tar
}
console.log(deepClone(person))