Javascript将对象推送到数组

时间:2016-03-09 17:19:34

标签: javascript

var cb = [];
for (var i = 0; i < 10; i++) {
    cb.push({
        'test': 'value'
    });
    console.log(cb);
};

我期待得到:[{test: value}, {test: value}, ... , {test: value}]

我最终得到的是每个日志声明的最终结果:

  

[对象]

     

[对象,对象]

     

[对象,对象,对象]

     

[对象,对象,对象,对象]

     

[对象,对象,对象,对象,对象]

     

[对象,对象,对象,对象,对象]

     

[对象,对象,对象,对象,对象,对象]

     

..........

当我展开任何这些数组时,它们都具有相同的结果。 例如,第一个数组包含:

[{test: value}, {test: value}, ... , {test: value}] 

这是最终值,不应该只有1个对象吗? 最终的结果是我所期待的,但我只是为什么在第一次推送后数组有10个元素。 有人可以解释一下发生了什么吗?

3 个答案:

答案 0 :(得分:1)

您需要序列化您的输出。尝试:

var cb = [];
for (var i = 0; i < 10; i++) {
    cb.push({
        'test': 'value'
    });
    console.log(JSON.stringify(cb));
};

答案 1 :(得分:0)

您正在记录数组对象,而不是对象的任何方面。输出是正确的,阵列也是如此。你需要更加具体。如果在console.log行的代码中设置断点,则会看到阵列正在正确填充。

而且,如果您不想在构建对象时查看对象的状态,只需将日志移到循环之外。

答案 2 :(得分:0)

执行cb[test]="value"(或者cb[myObject]="value"?我不确定你想要什么)会返回你所期望的:一个数组,其唯一的键测试(或myObject)包含定义的值

当使用push时,你不使用数组作为关联数组(key = value)而是作为索引数组(index = value),push的合同是添加到数组的末尾,使用下一个可用的索引 现在cb[0]{test: "value"},其他cb[1]cb[9]也是如此。