js 数组复制入对象组后数组没有键值导致赋值时全部被覆盖(巨大坑)

js 数组复制入对象组后数组没有键值导致赋值时全部被覆盖(巨大坑),// 多个对象载入 数组中,需要深拷贝,不然键指相同

1、【bug】例子 直接将dataRes数组中加入objRes对象组

let dataRes = []; //位置数量组
let objRes = { //位置量数据组
	categories: [], //号码数
	series: [{
			name: "1标题", //1标题
			data: [] //整型数据
		},
		{
			name: "2标题", //2标题
			data: [] //整型数据
		}
	]
};

for (var i = 0; i < Leng; i++) {// //载入位置数组
	dataRes.push(objRes); //
    // dataRes[i] = objRes; 任意一个模式赋值
    dataRes[0].categories[0] = 'AAAA';
}
// 这样子赋值 导致数组没有索引

2【正确方式】例子 将dataRes数组中加入objRes对象

let dataRes = []; //位置数量组
let objRes = { //位置量数据组
	categories: [], //号码数
	series: [{
			name: "1标题", //1标题
			data: [] //整型数据
		},
		{
			name: "2标题", //2标题
			data: [] //整型数据
		}
	]
};


for (var i = 0; i < Leng; i++) {// //载入位置数组
	dataRes.push( //正确方式
		{
			categories: [], //号码数
			series: [{
					name: "1标题", //1标题
					data: [] //整型数据
				},
				{
					name: "2标题", //2标题
					data: [] //整型数据
				}
			]
		}
	);
	dataRes[0].categories[0] = 'AAAA';
}
		 //正确方式		

3【简约方法】深度拷贝

缺点:该方法不能解决属性为: 函数、undefined、null、循环引用的情况

Array loading object needs deep copy,

    // 多个对象载入 数组中,需要深拷贝,不然键指相同
	let objXXX = {
		a:123,
		b:456,
		C:789
	};
	let arrYYY = [];
	arrYYY[0] = JSON.parse(JSON.stringify(objXXX));
	arrYYY[1] = JSON.parse(JSON.stringify(objXXX));
	
	
	arrYYY[0].a = "123";
	arrYYY[1].a = "9923";
	
	// 0: Object { a: "123", b: 456, C: 789 }
	// 1: Object { a: "9923", b: 456, C: 789 }
	console.log(arrYYY);
1,066 Views
分享你的喜爱
linwute
linwute

我要像梦一样自由,像大地一样宽容;
在艰辛放逐的路上,点亮生命的光芒;
我要像梦一样自由,像天空一样坚强;
在曲折蜿蜒的路上,体验生命的意义;

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注