js中数组push对象,前面的值总是被最后一次的值覆盖的问题

今天一同学问了我一个问题,说他js中定义了一个数组,每次往里面push对象,结果最后一次push的对象会覆盖之前push进去的值,问我怎么解决。如果你也遇到了相同的问题,请继续看下去---------------------------------------

下面是代码模拟:

[javascript]  view plain  copy
  1. var data = { a:'123', b: '456', c: '789'};  
  2. var dataObj = {};//在外面定义对象  
  3. var dataArr = [];  
  4. for(var i in data) {  
  5.     dataObj.name= data[i];  
  6.     dataArr.push(dataObj);  
  7. }  
  8. console.log(dataArr)  
结果输出的结果是:789,789,789,而不是期望的123,456,789

原因:每次取出来的值都放在dataObj.name中,因为是在外面的定义的对象,所以每次dataObj 的地址
是一样的,dataArr中保存的是dataObj的地址,当最后一次给dataObj.name赋值为789时,由于
是同一个dataObj,所以最后一次给dataObj.name赋值给讲前两次的值给覆盖掉,其实第二次已经
把第一次的值覆盖过了
解决方法:
[javascript]  view plain  copy
  1. var data = { a:'123', b: '456', c: '789'};  
  2. var dataArr = [];  
  3. for(var i indata){  
  4. var dataObj = {};//在里面定义对象  
  5.     dataObj.name= data[i];  
  6.     dataArr.push(dataObj);  
  7. }  
  8. console.log(dataArr)  
这样每次都是新的对象,dataObj.name指向的地址都不一样,数据就对了
这样输出的结果就是:123,456,789

猜你喜欢

转载自blog.csdn.net/weixin_38098192/article/details/80351884