今天在改代码的时候碰到了一个问题,就是在js中定义了一个数组,每次往里面push对象,结果最后一次push的对象会覆盖之前push进去的所有值,不怎么会前端,网上查到了原因---------------------------------------
下面是代码模拟:
-
var data = {
a:
'123',
b:
'456',
c:
'789'};
-
var dataObj = {};
//在外面定义对象
-
var dataArr = [];
-
for(
var i
in data) {
-
dataObj.name= data[i];
-
dataArr.push(dataObj);
-
}
-
console.log(dataArr)
结果输出的结果是:789,789,789,而不是期望的123,456,789
原因:每次取出来的值都放在dataObj.name中,因为是在外面的定义的对象,所以每次dataObj
的地址
是一样的,dataArr中保存的是dataObj的地址,当最后一次给dataObj.name赋值为789时,由于
是同一个dataObj,所以最后一次给dataObj.name赋值给讲前两次的值给覆盖掉,其实第二次已经
把第一次的值覆盖过了
解决方法:
-
var data = {
a:
'123',
b:
'456',
c:
'789'};
-
var dataArr = [];
-
for(
var i indata){
-
var dataObj = {};
//在里面定义对象
-
dataObj.name= data[i];
-
dataArr.push(dataObj);
-
}
-
console.log(dataArr)
这样每次都是新的对象,dataObj.name指向的地址都不一样,数据就对了
这样输出的结果就是:123,456,789