Ho un array di oggetti in questo modo:Elegantemente fare una somma di oggetti attributi a CoffeeScript
@items = [
{price: 12, quantity:1},
{price: 4, quantity:1},
{price: 8, quantity:1}
]
E io sto cercando qualcosa di simile:
sumPrice: ->
@items.sum (item) -> item.price * item.quantity
O qualcosa più vicino possibile per questo, è estremamente facile per tutti leggere il codice per capire che cosa sta succedendo.
Finora mi si avvicinò con:
sumPrice: ->
(items.map (a) -> a.price * a.quantity).reduce (a, b) -> a + b
- contiene troppo funzionale magia
- perde descrittivo
E:
sumPrice: ->
sum = 0
for item in items
sum += item.price * item.quantity
sum
- che può essere compreso da novizio programmatori JS/caffè
- si sente un po 'stupido
amo CoffeeScript quindi spero che ci sia una soluzione più bello per questo & scenari simili che mi mancano.
Grazie per l'implementazione della somma! – hakunin
@hakunin Prego. A proposito, ho dimenticato di menzionare che 'sum' ha la funzione identity come parametro predefinito in modo da poter sommare facilmente un elenco di numeri' [3, -4, 5] .sum() ':) – epidemian
Mi piace la" funzione denominata " "approccio, rende il codice molto più pulito e autodocumentante di una grande pila di callback. Potrei fare un ulteriore passo avanti e aggiungerne un altro in modo che potessi 'sumPrices = (t, i) -> t + itemPrice (i); sum = items.reduce (sumPrices, 0) '. –