复杂多层级数组深拷贝--重要

多层级数组源数据data赋值给res,当res改变数据时源数据data也跟随着改变,真是令人头痛。如果我们想改变res数据的同时又不想源数据data改变,以下方法深拷贝能解决上述问题。

function deepCopy(data) {
	 if (data.constructor.name === 'Array') { 
		// 判断为数组类型
	 	var arrCopy = []
	 	for (var i = 0, len = data.length; i < len; i++) {
		//遍历数组
			 if (data[i] instanceof Object) {
				// arrary object null以下有关于instanceof的注解
			 	arrCopy.push(deepCopy(data[i]))
			 } else { 
			// 基本类型
			 	arrCopy.push(data[i])
			 }
	 	}
	 	return arrCopy;
	
	 } else { // 为对象
 		var objCopy = {};
	 	for (x in data) {
			 if(data[x] instanceof Object){
			 	objCopy[x] = deepCopy(data[x])
			 }else{ // 基本类型
			 	objCopy[x] = data[x];
			 }
		}
		 return objCopy;
	}
 }

var data = [
  {
  name:"lisi",
  list:[
    {name:'wm',age:22,dec:{},a:[]},
    {name:'zhangsan',age:21}, 
    {name:'zhaosi',age:23}
    ]
  
  },{
  name:"张三",
  list:[
    {name:'nihao',age:22,dec:{},a:[]},
    {name:'libai',age:21}, 
    {name:'wangwu',age:23}
    ]
  
  }
]
var res = deepCopy(data)

console.log(res)

去改变res的数据,看看源数据data有没有改变

res[0].name = "李白";
console.log("data",data,"res",res)

如图所示,数据源并没有改变
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值