gpt4 book ai didi

Javascript 数组项被覆盖

转载 作者:太空宇宙 更新时间:2023-11-04 02:52:47 25 4
gpt4 key购买 nike

我有一个包含以下代码的函数:

stores = [];
console.log('in stores d.length is ', districts.length);
districts.forEach( function ( dis ) {
dis.store.forEach( function( store ) {
store.structure = dis.structure;
store.structure.dis = dis.district_nbr;
store.structure.sto = store.store_nbr;
//store.message = getMessage(store.structure);
console.log('store st is ', store.structure);
stores.push( store );
});
});
stores.forEach( function ( s ) {
console.log("after set Master this is stores ", s.structure);
})

随着循环的进行,我为每个商店初始化一个对象结构,该对象从父 dis 对象的结构开始,该对象具有一些字段并已被验证为正确。然后,我向结构对象添加一个附加字段来说明区号和商店号。每个 dis 对象都有一组唯一的存储。

嵌套 for 循环中的 console.log 显示存储的正确结构。然而,当我事后打印它们时,商店都有循环中的最终区号和循环中的最终商店号,而不是它们各自的正确值。

问题:Array.push() 中是否发生了一些我不知道的事情?我认为我真正的问题是我错过了什么?

最佳答案

您需要克隆 dis.struct 以避免在循环的每次迭代中修改相同的对象。

function clone(obj) {
return JSON.parse(JSON.stringify(obj));
}

stores = [];
console.log('in stores d.length is ', districts.length);
districts.forEach( function ( dis ) {
dis.store.forEach( function( store ) {
store.structure = clone(dis.structure);
store.structure.dis = dis.district_nbr;
store.structure.sto = store.store_nbr;
//store.message = getMessage(store.structure);
console.log('store st is ', store.structure);
stores.push( store );
});
});
stores.forEach( function ( s ) {
console.log("after set Master this is stores ", s.structure);
})

有关深度克隆对象的更多信息,请参阅 this answer on stack overflow .

关于Javascript 数组项被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43397456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com