今天一同学问了我一个问题,说他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