JavaScript往数组push对象时出现值重复问题如何解决?
问题原因
JavaScript中对象属于引用类型,你的代码里jsuOrderSet是在循环外定义的,全程只有这一个对象实例,每次循环修改的都是同一个对象的属性。调用push方法时只是把这个对象的内存引用存到数组里,并不是复制了全新的对象。循环结束后这个对象的属性是最后一次迭代赋值的JSU21729,所以数组里所有引用指向的对象值都是一致的。
修复方案
方案1:循环内每次创建新对象
把jsuOrderSet的定义移到for循环内部,每次迭代都生成一个全新的对象:
let jsuOrderData = []; let response = [{ itemno: 1, jsuordref: 'JSU21628' }, { itemno: 1, jsuordref: 'JSU21729' }, ]; console.log(response); for (let i = 0; i < response.length; i++) { // 每次循环新建独立对象 let jsuOrderSet = { jsuOrder: response[i].jsuordref, itemNo: response[i].itemno }; jsuOrderData.push(jsuOrderSet); } console.log(jsuOrderData);
方案2:用数组map方法简化写法
更推荐用原生数组的map方法实现,代码更简洁易读:
const response = [{ itemno: 1, jsuordref: 'JSU21628' }, { itemno: 1, jsuordref: 'JSU21729' }, ]; const jsuOrderData = response.map(item => ({ jsuOrder: item.jsuordref, itemNo: item.itemno })); console.log(jsuOrderData);
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

