Проблема возникает, когда кошелек уже был обновлен в предыдущей итерации.
Каждый кошелек объект изменяется только один раз при запуске l oop , Два или более объектов кошелька в массиве могут представлять одну и ту же строку в базе данных, но они по-прежнему являются различными объектами - изменение одного не изменит другого.
const wallets = [
{ id: 1, amount: 0 },
{ id: 2, amount: 0 },
{ id: 1, amount: 0 },
]
for (const wallet of wallets) {
wallet.amount = wallet.amount + 5
}
console.log(wallets[0]) // { id: 1, amount: 5 }
console.log(wallets[1]) // { id: 2, amount: 5 }
console.log(wallets[2]) // { id: 1, amount: 5 }
Обратите внимание, что нам не нужно используйте переменную count
вообще. Поскольку const wallet
является ссылкой на исходный объект в массиве, если мы изменим его, мы изменим исходный объект.
Если вы хотите отслеживать суммы по идентификатору, вам необходимо реализовать эти логики c. Например:
const wallets = [
{ id: 1, amount: 0 },
{ id: 2, amount: 0 },
{ id: 1, amount: 0 },
]
const amountsById = {}
for (const wallet of wallets) {
amountsById[wallet.id] = (amountsById[wallet.id] || wallet.amount) + 5
}
const updatedWallets = wallets.map(wallet => ({
...wallet,
amount: amountsById[wallet.id],
}))
console.log(updatedWallets[0]) // { id: 1, amount: 10 }
console.log(updatedWallets[1]) // { id: 2, amount: 5 }
console.log(updatedWallets[2]) // { id: 1, amount: 10 }