我正在执行 for 循环以将对象推送到数组中。但最终的数组输出得到相同的重复值。
这是我的代码:
let jsuOrderData = [];
let jsuOrderSet = {
jsuOrder: '',
itemNo: '',
};
let response = [{
itemno: 1,
jsuordref: 'JSU21628'
},
{
itemno: 1,
jsuordref: 'JSU21729'
},
];
console.log(response);
for (let i = 0; i < response.length; i++) {
console.log(response[i].jsuordref);
jsuOrderSet.jsuOrder = response[i].jsuordref;
jsuOrderSet.itemNo = response[i].itemno;
jsuOrderData.push(jsuOrderSet);
}
console.log(jsuOrderData);
我得到的输出为
[{"itemNo": 1, "jsuOrder": "JSU21729"}, {"itemNo": 1, "jsuOrder": "JSU21729"}]
而不是预期的输出
[{"itemNo": 1, "jsuOrder": "JSU21628"}, {"itemNo": 1, "jsuOrder": "JSU21729"}]
谁能告诉我哪里出错了?请...
答案 0 :(得分:1)
这是因为当您将 jsuOrderSet
推入 jsuOrderData
时,您并没有将对象的副本传递到数组中。相反,您将“引用”传递给 jsuOrderSet
。因此,当您更改 jsuOrderSet
并将其再次推入数组时,您只是将相同的引用推入数组中,一遍又一遍——因此所有值都将相同,设置为您设置的任何值 { {1}} 到最后。为了解决这个问题,将 jsuOrderSet
的声明移动到 jsuOrderSet
循环中,这样每次都是不同的对象引用,就像这样:
for
这里有一个清晰的方法来展示这个“参考”的东西是如何与一个更通用的例子一起工作的:
let response = [{
itemno: 1,
jsuordref: 'JSU21628'
},
{
itemno: 1,
jsuordref: 'JSU21729'
},
];
jsuOrderData = [];
for (let i = 0; i < response.length; i++) {
let jsuOrderSet = {
jsuOrder: '',
itemNo: '',
};
console.log(response[i].jsuordref);
jsuOrderSet.jsuOrder = response[i].jsuordref;
jsuOrderSet.itemNo = response[i].itemno;
jsuOrderData.push(jsuOrderSet);
}
console.log(jsuOrderData);
答案 1 :(得分:0)
或者你可以使用它。
let jsuOrderSet = {};
let response = [
{itemno: 1, jsuordref: 'JSU21628'},
{itemno: 1, jsuordref: 'JSU21729'},
];
let jsuOrderData = [];
for (let i = 0; i < response.length; i++) {
let obj = {jsuordref : response[i].jsuordref, itemno: response[i].itemno};
jsuOrderData.push(obj);
}
console.log(jsuOrderData);