if(oclass == 'Object') result = {}; else if(oclass == 'Array') result = []; else return obj; // 遍历对象 for(let key in obj){ var copy = obj[key]; if(getClass(copy) == 'Object'||getClass(copy) == 'Array'){ result[key] = deepCopy(copy); // 再次调用函数 // resu...
1、Object.assign() 2、转成JSON 3、递归 4. 通过jQuery的extend方法实现深拷贝 5. lodash函数库实现深拷贝 一、区别 浅拷贝(shallow copy): 复制指向某个对象的指针,而不复制对象本身,新旧对象共享一块内存;浅拷贝就是只拷贝一层,更深层次对象级别只拷贝引用(地址)当拷贝的新对象发生改变时,原对象也会发生相...
const copy = deepCopy(obj); console.log(copy); // { a: { b: 1 } } 深浅拷贝是 JavaScript 中常用的操作,用于复制对象和数组。浅拷贝只复制对象的一层,而深拷贝会复制整个对象的所有层次。浅拷贝的实现方式有 Object.assign()、Spread operator、Array.slice() 和 Array.concat(),而深拷贝的实现方式...
一:利用递归实现对对象或数组的深拷贝 function deepCopy(obj) { if(!obj || typeof obj !== 'object') { throw new Error('error arguments'); } const targetObj = Array.isArray(obj) ? [] : {}; for(let key in obj) { if(obj.hasOwnProperty(key)) { if(obj[key] && typeof obj[ke...
下面是deepCopy()深拷贝函数,其中使用到了判断变量的类型函数 //判断变量的类型functiongetType(obj){ let str= Object.prototype.toString.call(obj);//检测基本类型值,引用类型值的类型let map ={'[object Boolean]': 'boolean','[object Number]': 'number','[object String]': 'string','[object Functi...
浅拷贝可以通过创建一个新的空对象,for...in遍历现有对象的属性添加给新对象;代码更简洁的方式是Object.assign()方法。也可以使用第三方库,如【Underscore】_.clone()等。 我们先看看第一种方式封装的写法。 function shallowCopy( obj ) { let copy = Array.isArray(obj) ? [] : {}; ...
target[key] = deepClone(source[key]); } else { target[key] = source[key]; } } } return target; } 2.1解决循环引用和symblo类型 function cloneDeep(source, hash = new WeakMap()) { if (typeof source !== 'object' || source === null) { ...
deepCopyObject.nestedObject.sex='女';// 打印原始对象和拷贝对象,观察是否相互影响console.log('原始对象:', originalObject);console.log('深拷贝对象:', deepCopyObject); 在这个例子中,deepCopyObject是originalObject的深拷贝。当我们修改deepCopyObject对象的属性时,不会影响originalObject对象的属性。
if((p instanceof Object) || typeof p === 'function'){ //基本数据类型和函数 newObj[p] = obj[p]; }else{ //继续复制对象里面的对象 newObj[p] = deepCopy(obj[p]); } } return newObj; } let p = { name: 'bob', friends: ['jack', 'rose'] ...
function deepClone(obj) { if (obj === null || typeof obj !== 'object') { retur...