JavaScript中使用复杂对象进行push操作

3
我将建立一个对象数组,其中包含一个类型为数组的属性:
以下是简化的代码:
var _data = [];
for(var i=0;i<10;i++) {
  var element = {
        id: i,
        answers: []
  };

  for(var j=0;j<3;j++) {                        
    var answer = {
      id: j,
      description: ''
    };
   element.answers.push(answer);
  }
  _data.push(element);
}

在两个循环结束时,数组_data有10个元素,但每个元素的属性answer为空(我期望每个元素有3个项)。 为什么会这样呢?似乎push只推送了“第一级属性”,而没有推送整个对象。 谢谢。

你的代码在我这里可以正常工作,你确定不是显示问题吗?尝试检查 _data.toSource() 的输出。 - user1107907
1个回答

1
在Firefox 8中运行您的代码将得到以下 _data 数组:
_data:
[{id:0, answers:[{id:0, description:""}, {id:1, description:""}, {id:2, description:""}]}, 
 {id:1, answers:[{id:0, description:""}, {id:1, description:""}, {id:2, description:""}]}, 
 {id:2, answers:[{id:0, description:""}, {id:1, description:""}, {id:2, description:""}]}, 
 {id:3, answers:[{id:0, description:""}, {id:1, description:""}, {id:2, description:""}]}, 
 {id:4, answers:[{id:0, description:""}, {id:1, description:""}, {id:2, description:""}]}, 
 {id:5, answers:[{id:0, description:""}, {id:1, description:""}, {id:2, description:""}]}, 
 {id:6, answers:[{id:0, description:""}, {id:1, description:""}, {id:2, description:""}]}, 
 {id:7, answers:[{id:0, description:""}, {id:1, description:""}, {id:2, description:""}]}, 
 {id:8, answers:[{id:0, description:""}, {id:1, description:""}, {id:2, description:""}]}, 
 {id:9, answers:[{id:0, description:""}, {id:1, description:""}, {id:2, description:""}]}]

也许你打错字了,应该是 answers 而不是 answer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接