拷贝(深拷贝)
①递归方式实现深拷贝
/** 深拷贝 */ objDeepCopy: function(source) { var sourceCopy = source instanceof Array ? [] : {}; for (var item in source) { if (typeof source[item] === 'object') { if (source[item] === null) { sourceCopy[item] = null; } else { sourceCopy[item] = this.objDeepCopy(source[item]); } } else { sourceCopy[item] = source[item]; } } return sourceCopy; },
②用 JSON.stringify 把对象转换成字符串,再用 JSON.parse 把字符串转换成新的对象。
可以转成 JSON 格式的对象才能使用这种方法,如果对象中包含 function 或 RegExp 这些就不能用这种方法了。
// #通过js的内置对象JSON来进行数组对象的深拷贝 function deepClone(obj) { let _obj = JSON.stringify(obj); let objClone = JSON.parse(_obj); return objClone; }
③Object.assign()拷贝
当对象中只有一级属性,没有二级属性的时候,此方法为深拷贝,但是对象中有对象的时候,此方法,在二级属性以后就是浅拷贝。
④通过jQuery的extend方法实现深拷贝
let $ = require('jquery'); let obj1 = { a: 1, b: { f: { g: 1 } }, c: [1, 2, 3] }; let obj2 = $.extend(true, {}, obj1);
⑤lodash.cloneDeep()实现深拷贝
let _ = require('lodash'); let obj1 = { a: 1, b: { f: { g: 1 } }, c: [1, 2, 3] }; let obj2 = _.cloneDeep(obj1);