js深克隆深拷贝

不足之处是不能拷贝函数,但是基本够用

 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]; //值类型的数据直接进行拷贝
			}
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用 JavaScript 写一个深拷贝的方法可以使用如下代码: ``` function deepClone(obj) { if (typeof obj !== 'object' || obj === null) { return obj; } let result; if (Array.isArray(obj)) { result = []; } else { result = {}; } for (const key in obj) { result[key] = deepClone(obj[key]); } return result; } ``` 这是一个递归函数,它判断输入的变量是否是一个对象,如果不是,则直接返回该变量。如果是对象,则判断该对象是数组还是普通对象,并创建一个对应的数组或空对象。最后,遍历该对象的所有属性,并对每个属性进行深拷贝。 ### 回答2: 深拷贝是指在JavaScript中复制一个对象或数组时,不仅复制了对象的值,还复制了对象内部的所有属性和子属性的值。下面是一个用JavaScript编写的深拷贝方法: ```javascript function deepCopy(obj) { // 判断是否为基本数据类型 if (typeof obj !== 'object' || obj === null) { return obj; } // 判断是对象还是数组 const clone = Array.isArray(obj) ? [] : {}; // 递归拷贝对象的每个属性/子属性 for (let key in obj) { clone[key] = deepCopy(obj[key]); } return clone; } ``` 该方法首先判断给定参数是否为基本数据类型,如果是,则直接返回这个值。如果是对象或数组类型,则创建一个空的克隆对象,在循环中递归地拷贝给定对象的每个属性和子属性,将其赋值给克隆对象的对应属性。 这个方法会递归地处理对象的所有属性和子属性,确保生成的克隆对象与原对象完全独立,任何的修改都不会相互影响。这就是深拷贝的特性。 使用这个深拷贝方法可以确保在JavaScript中正确地复制对象和数组,即使它们包含嵌套的对象和数组。 ### 回答3: 深拷贝是指创建一个完全独立的对象,与原对象具有相同的值,但是在内存中是独立存在的,修改其中一个对象的值不会影响到另一个对象。下面是一个用JavaScript写的深拷贝方法: ```javascript function deepCopy(obj) { // 如果传入的是基本类型或者是函数,则直接返回 if (typeof obj !== 'object' || obj === null || obj instanceof Function) { return obj; } // 根据传入的对象的类型,创建一个新的对象 const clone = Array.isArray(obj) ? [] : {}; // 遍历原对象的属性,并递归调用深拷贝方法 for (let key in obj) { if (obj.hasOwnProperty(key)) { clone[key] = deepCopy(obj[key]); } } return clone; } ``` 这个方法首先判断传入的参数是否是基本类型或函数类型,如果是则直接返回,否则进入拷贝过程。在拷贝过程中,根据传入对象的类型创建一个新的对象。然后遍历原对象的属性,并通过递归调用深拷贝方法,将原对象的属性以及其值赋值给新对象。最后返回新对象。 通过这个深拷贝方法,我们可以创建一个与原对象具有相同值的独立对象,修改其中一个对象的值不会影响到另一个对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值