为什么.push()方法重复它添加到数组的最后一个元素的值?

Dav*_*Lin 0 javascript

const maxObj = [{"BTCH#BD":57887,"BTYPEBD":"OCO"},
                {"BTCH#BD":57887,"BTYPEBD":"OCO"},
                {"BTCH#BD":57890,"BTYPEBD":"OTH"}]
const req = "4976809";


const result = [];
const temp = { reqId: req, batch: null };

for (var x = 0; x < maxObj.length; x++) {
    temp.batch = maxObj[x];

    result.push(temp);
}

console.log(JSON.stringify(result));
Run Code Online (Sandbox Code Playgroud)

在这段代码中,我试图遍历一个对象数组,并将每个对象分配给临时模板对象的属性,然后我将其推送到结果数组.我的预期输出是这样的:

[{"reqId":"4976809","batch":{"BTCH#BD":57887,"BTYPEBD":"OCO"}},
 {"reqId":"4976809","batch":{"BTCH#BD":57887,"BTYPEBD":"OCO"}},
 {"reqId":"4976809","batch":{"BTCH#BD":57890,"BTYPEBD":"OTH"}}]
Run Code Online (Sandbox Code Playgroud)

但我的实际输出是这样的:

[{"reqId":"4976809","batch":{"BTCH#BD":57890,"BTYPEBD":"OTH"}}, 
 {"reqId":"4976809","batch":{"BTCH#BD":57890,"BTYPEBD":"OTH"}}, 
 {"reqId":"4976809","batch":{"BTCH#BD":57890,"BTYPEBD":"OTH"}}]
Run Code Online (Sandbox Code Playgroud)

我如何解决这个问题,以便获得上面的预期输出?

Nin*_*olz 5

您使用相同的对象进行推送.您在数组中获得相同的对象.

您可以使用具有所需属性的新对象来防止存储相同的对象引用.

const maxObj = [{"BTCH#BD":57887,"BTYPEBD":"OCO"},
            {"BTCH#BD":57887,"BTYPEBD":"OCO"},
            {"BTCH#BD":57890,"BTYPEBD":"OTH"}]
const req = "4976809";
const result = [];

for (var x = 0; x < maxObj.length; x++) {
    result.push({ reqId: req, batch: maxObj[x] });
}

console.log(JSON.stringify(result));
Run Code Online (Sandbox Code Playgroud)