不足之处是不能拷贝函数,但是基本够用
const deepCopy = obj => JSON.parse(JSON.stringify(obj))
如果涉及拷贝函数
简单一点
function copy(object) {
if (obj instanceof Date) return new Date(obj);
if (obj instanceof RegExp) return new RegExp(obj);
let obj = object instanceof Array ? [] : {};
for (const [k, v] of Object.entries(object)) {
obj[k] = typeof v == "object" ? copy(v) : v;
}
return obj;
}
另一种
const deepCopy = obj => {
if (typeof obj !== 'object') return
if (obj instanceof Date) return new Date(obj);
if (obj instanceof RegExp) return new RegExp(obj);
const newObj = obj instanceof Array ? [] : {}
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
newObj[key] = typeof obj[key] === 'object' ?
deepCopy(obj[key]) : obj[key]
}
}
return newObj
}
这个也行
function inCopy(obj1, obj2) {
var obj1 = obj1 || {};//容错处理
for (var k in obj2) {
if (obj2.hasOwnProperty(k)) { //只拷贝实例属性,不进行原型的拷贝
if (typeof obj2[k] == 'object') { //引用类型的数据单独处理
obj1[k] = Array.isArray(obj2[k]) ? [] : {};
inCopy(obj1[k], obj2[k]); //递归处理引用类型数据
} else {
obj1[k] = obj2[k]; //值类型的数据直接进行拷贝
}
}
}
}