J'ai un tableau de paiements en attente sous forme d'objets et je veux connaître le total de tous les paiements ensemble car ils sont pour les mêmes magasins. Quand la fonction est appelée une fois, elle calcule correctement, mais quand je l'appelle à nouveau, elle mute le tableau d'objets original. Je ne comprends pas pourquoi il le mute lorsque je fais un map dessus.
J'ai besoin que la fonction ne mute pas le tableau d'objets original. Elle devrait faire le calcul et me donner juste le résultat. Elle ne devrait pas rajouter sur la somme actuelle si elle est appelée à nouveau. Elle devrait le refaire complètement.
let pending = [
{Date: "20/12/2018",
Company:[
{Name: "Asda", Amount: 5.5},
{Name: "M&S", Amount: 10},
{Name: "Nisa", Amount: 15},
{Name: "Iceland", Amount: 10},
{Name: "Tesco", Amount: 5}
]},
{Date: "20/12/2018",
Company:[
{Name: "Asda", Amount: 5.5},
{Name: "M&S", Amount: 10},
{Name: "Nisa", Amount: 15},
{Name: "Iceland", Amount: 10},
{Name: "Tesco", Amount: 5}
]},
{Date: "20/12/2018",
Company:[
{Name: "Asda", Amount: 5.5},
{Name: "M&S", Amount: 10},
{Name: "Nisa", Amount: 15},
{Name: "Iceland", Amount: 10},
{Name: "Tesco", Amount: 5}
]},
{Date: "20/12/2018",
Company:[
{Name: "Asda", Amount: 5.5},
{Name: "M&S", Amount: 10},
{Name: "Nisa", Amount: 15},
{Name: "Iceland", Amount: 10},
{Name: "Tesco", Amount: 5}
]}
]
function returnSpendTotals() {
let sumSpend = []
let spendArray = pending.map(activities => activities.Company)
spendArray.flat().forEach(spend => {
let shopName = sumSpend.find(item => item.Name === spend.Name)
if (shopName) {
shopName.Amount += spend.Amount
} else {
sumSpend.push(spend)
}
})
return sumSpend
}
ça devrait retourner à chaque fois que j'appelle returnSpendTotals()
[{Name: "Asda", Amount: 22},
{Name: "M&S", Amount: 40},
{Name: "Nisa", Amount: 60},
{Name: "Iceland", Amount: 40},
{Name: "Tesco", Amount: 20}]
Mais si je l'appelle une deuxième fois, voici ce que j'obtiens
[{Name: "Asda", Amount: 38.5},
{Name: "M&S", Amount: 70},
{Name: "Nisa", Amount: 105},
{Name: "Iceland", Amount: 70},
{Name: "Tesco", Amount: 35}]
et le premier objet de pending est maintenant
{Company: [
{Name: "Asda", Amount: 38.5},
{Name: "M&S", Amount: 70},
{Name: "Nisa", Amount: 105},
{Name: "Iceland", Amount: 70},
{Name: "Tesco", Amount: 35}],
Date: "20/12/2018"}
Et le reste des objets dans pending sont inchangés