我有一個項目,像這樣的數組:優雅做對象的總和屬性中的CoffeeScript
@items = [
{price: 12, quantity:1},
{price: 4, quantity:1},
{price: 8, quantity:1}
]
我期待這樣的事情:
sumPrice: ->
@items.sum (item) -> item.price * item.quantity
或任何儘可能接近對此,這使得閱讀代碼的每個人都非常容易理解發生了什麼。
到目前爲止,我想出了:
sumPrice: ->
(items.map (a) -> a.price * a.quantity).reduce (a, b) -> a + b
- 包含了太多的功能神奇
- 失去了描述性
和:
sumPrice: ->
sum = 0
for item in items
sum += item.price * item.quantity
sum
- 可以通過新手JS /咖啡程序員
- 理解感覺有點笨
我愛CoffeeScript的,所以我希望有一個更好的解決方案,我錯過這個&類似的場景。
謝謝你的總和! – hakunin
@hakunin不客氣。順便說一句,我忘了提及'sum'具有身份函數作爲默認參數,所以你可以簡單地總結一個數字列表'[3,-4,5] .sum()':) – epidemian
我喜歡「命名函數「方法,使得代碼比一大堆回調更加清潔和自我記錄。我可能會更進一步,並添加另一個,這樣我可以'sumPrices =(t,i) - > t + itemPrice(i); sum = items.reduce(sumPrices,0)'。 –