将对象推入数组时,值会重复 - javascript

时间:2021-06-13 04:34:00

标签: javascript arrays reactjs react-native object

我正在执行 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"}]

谁能告诉我哪里出错了?请...

2 个答案:

答案 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);
相关问题