CoffeeScript攻略4.8:歸納陣列

CoffeeScript Cookbook發表於2011-12-08

問題

你有一個物件陣列,想要把它們歸納為一個值,類似於Ruby中的reduce()和reduceRight()。

方案

可以使用Array的reduce()和reduceRight()方法,再使用一個匿名函式,保持程式碼清晰易懂。這裡歸納可能會像對數值和字串應用+運算子那麼簡單。

[1,2,3,4].reduce (x,y) -> x + y
# => 10

["words", "of", "bunch", "A"].reduceRight (x, y) -> x + " " + y
# => 'A bunch of words'

或者,也可能更復雜一些,例如把列表中的元素聚集到一個組合物件中。

people =
    { name: 'alec', age: 10 }
    { name: 'bert', age: 16 }
    { name: 'chad', age: 17 }

people.reduce (x, y) ->
    x[y.name]= y.age
    x
, {}
# => { alec: 10, bert: 16, chad: 17 }

討論

Javascript 1.8中引入了reduce 和reduceRight,而Coffeescript為匿名函式提供了簡單自然的表達語法。二者配合使用,可以把集合的項合併為組合的結果。


enter image description here

相關文章