2017-12-26 3 views
0

Ich versuche, einige Getter zu programmieren, um eine Teilgesamtmenge und eine Stückzahl zu berechnen. Aber wenn ich den Code für die Verwendung von array.reduce umstrukturiert habe, hat partTotal undefined zurückgegeben.Vuex Getter und Array reduzieren

Können Sie mir helfen, zu wissen, warum dies funktioniert:

getters: { 

    calcPart: (state, getters) => part => { 

     let total = 0.0 

     for (let i = 0, length = part.items.length; i < length; i++) { 
      total += getters.calcItem(part.items[i]) 
     } 

     return total 

    }, 

    calcItem: state => item => { 
     return parseFloat(item.value1) * parseFloat(item.value2) 
    }, 

} 

Und warum das nicht funktioniert (calcPart gibt „undefined“):

getters: { 

    calcPart: (state, getters) => part => { 
     return part.items.reduce((acc, item) => { acc + getters.calcItem(item) }, 0.0) 
    }, 

    calcItem: state => item => { 
     return parseFloat(item.value1) * parseFloat(item.value2) 
    }, 

} 

Hat es etwas mit der Tatsache zu tun, von reduzieren ist eine asynchrone Funktion?

Vielen Dank im Voraus!

Antwort

0

Sie müssen innerhalb von Klammern zurückkehren.

ändern Sie diese Zeile:

return part.items.reduce((acc, item) => { acc + getters.calcItem(item) }, 0.0) 

Um diesen:

return part.items.reduce((acc, item) => { return acc + getters.calcItem(item) }, 0.0) 

Sie können auch das undefinierte Ergebnis vermeiden zu entfernen, indem einfach die Klammern:

return part.items.reduce((acc, item) => acc + getters.calcItem(item), 0.0) 

Randbemerkung: Typ Semikolons.

+0

Schön! Es funktioniert jetzt! Vielen Dank! –