js数组对象,对象深拷贝

//基础对象深/浅拷贝
	let obj = { a:'1', b:'2'}
	// let newObj = obj //浅拷贝
	// newObj.a = 4 // 改变newObj的值,obj也会发生改变
	// console.log(obj,newObj) // newObj发生改变,obj也会发生改变

	let newObj = JSON.parse(JSON.stringify(obj)) //深拷贝
	// let newObj = Object.assign({},obj) //深拷贝
	// let newObj = {...obj} //深拷贝
	newObj.a = 6 //改变改变newObj的值
	console.log(obj,newObj) // newObj发生改变,obj不会发生改变


	//数组对象,多维对象深/浅拷贝
	// let arrJson = [{id:1,name:'js',children:[{name:1111,id:12}]},{id:2,name:"html"},{id:3,name:"css"},{id:4,name:'vue'}]
	let arrJson = {
		title:'js',
		id:1,
		children:{
			name:'对象拷贝',
			children:{
				name:'text'
			}
		},
		fun(){
			let title = this.title + this.children.name
			return title
		}
	}
	// let newArrJson = arrJson //直接赋值,浅拷贝,改变newArrJson的值,原对象arrJson的值也会一起改变
	// let newArrJson = JSON.parse(JSON.stringify(arrJson)) //JSON,深拷贝,改变newArrJson的值,原对象arrJson的值不会发送改变
	// let newArrJson = {...arrJson} // 多层嵌套对象,使用解构语法,只能最外层对象,嵌套深层次的对象newArrJson发生改变,原对象arrJson也会发生变化
	// let newArrJson = Object.assign({},arrJson)// 多层嵌套对象浅拷贝,使用解构语法,只能最外层对象,嵌套深层次的对象newArrJson发生改变,原对象arrJson也会发生变化
	let newArrJson = deepCopy(arrJson) // 改变newArrJson的值,原对象arrJson的值不会发送改变
	// newArrJson[0].id = 666 
	// newArrJson[0].children[0].name = 666 
	newArrJson.children.name = 666 
	newArrJson.title = 666 
	console.log(arrJson,newArrJson)
	
	function deepCopy (obj) {
		let newobj = (obj instanceof Array) ? [] : {};
		if(typeof obj !== 'object'){
		    return;
		}
		for(let i in obj){
			newobj[i] = typeof obj[i] === 'object' ? deepCopy(obj[i]) : obj[i];
		}
		return newobj
	}

数组对象,多层嵌套对象以上同理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值