使用For循环在数组中推送Javascript对象

rks*_*ksh 1 javascript arrays

嗨,我正在尝试使用for循环在javascript中推送数组内的javascript对象来迭代数据.这是我的代码的样子.

var data = {"up": [{
  "name": "jack",
  "age" : 10
},
 {
   "name" : "jhon",
   "age" : 12
  }]};

var output = {};
var output_data = {
  element: []
};

for (var key in data.up) {
  output.user_name = data.up[key].name;
  output_data.element.push(output);
}

console.log(output_data.element);
Run Code Online (Sandbox Code Playgroud)

但是,正如您在示例http://jsbin.com/fanazaxoda/edit?html,js,console中看到的那样,只有第二个元素名称'jhon'被插入两个世界中.我在这做错了什么?请解释.

Pra*_*lan 8

将输出初始化内部移动到循环中,否则每次都推送对象的引用.更新它的属性可能反映在所有数组元素中,因为所有元素都引用同一个对象.

var output_data = {
  element: []
};

for (var key in data.up) {  
  var output = {}; // create new empty object on each iteration
  output.user_name = data.up[key].name;
  output_data.element.push(output);
}
Run Code Online (Sandbox Code Playgroud)

var data = {
  "up": [{
    "name": "jack",
    "age": 10
  }, {
    "name": "jhon",
    "age": 12
  }]
};

var output_data = {
  element: []
};

for (var key in data.up) {
  var output = {};
  output.user_name = data.up[key].name;
  output_data.element.push(output);
}

console.log(output_data.element);
Run Code Online (Sandbox Code Playgroud)