对于深度克隆es5与es6如何处理

    技术2022-07-11  80

    es6之前的克隆方法

    如过对于toStr.call不理解可以看这篇文章的最后部分讲解到了这个方法:https://blog.csdn.net/weixin_41277748/article/details/113359608

     

    /** * es6之前的方法 * 深度克隆 * @param origin 原始值 * @param target 克隆目标 */ function deepClone(origin, target) { let aims = target || {}, toStr = Object.prototype.toString, arrStr = "[object Array]"; for (const prop in origin) { if (origin.hasOwnProperty(prop)) { if (typeof (origin[prop]) !== null && typeof (origin[prop]) == 'object') { aims[prop] = toStr.call(origin[prop]) == arrStr ? [] : {}; deepClone(origin[prop], aims[prop]); } else { aims[prop] = origin[prop]; } } } }

    数组克隆

    1、使用deepClone方法进行克隆数组

    const arr1=[1,2,3,4,5]; const arr2=[]; deepClone(arr1,arr2); console.log('arr1',arr1,'arr2深度克隆结果',arr2); arr2.push(6); console.log('arr1',arr1,'arr2深度克隆结果添加数据不影响之前的',arr2);

    使用es6方法克隆数组 都不会影响原先数组

    const arr3=[...arr1]; console.log('克隆',arr3); arr3.push(7); console.log('添加后的数组',arr3)

    对象克隆

    1、使用deepClone方法进行克隆对象

    const obj1={ name:'wq', age:18, sex:'male', love:['隔壁王嫂','隔壁陈嫂','隔壁刘嫂'], wife:{ name:'杜XX', age:20, sex:"female" } }; const obj2={}; deepClone(obj1,obj2) console.log('克隆后的对象',obj2); obj2.name='老王'; console.log('原先的对象',obj1,'克隆后修对象',obj2);

    2、使用es6方法克隆对象 可以克隆也可以添加属性,不会改变原来的值

    const obj3={ ...obj1, love:[...obj1.love], wife:{ ...obj1.wife, appearance:'笑起来真好看' } } console.log('原来的对象',obj1,'克隆的对象',obj3)

     

     

     

     

    Processed: 0.013, SQL: 9