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

时间:2016-06-07 05:07:31

标签: 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);

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

1 个答案:

答案 0 :(得分: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);
}

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);