Javascript 将对象推送到数组中

Javascript pushing objects into array

本文关键字:数组 对象 Javascript      更新时间:2023-09-26
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 个元素感到困惑。有人可以解释一下发生了什么吗?

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

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

您正在记录数组对象,而不是对象的任何方面。输出是正确的,数组也是如此。你只需要更具体。如果在控制台.log行所在的代码中设置断点,您将看到数组正在正确填充。

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

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

当使用 push 时,您不是将数组用作关联数组(键 = 值),而是用作索引数组(索引 = 值),推送的合约是使用下一个可用索引添加到数组的末尾。
所以现在cb[0] {test: "value"},其他人cb[1] cb[9]也是如此。