gist

2012年6月5日火曜日

CoffeeScriptで学ぶ Underscore.js 01(Collection編)

Underscore.js は、Node.jsで最も利用されているパッケージです。JavaScriptに60以上の機能を追加します。

大きく6つの機能に分類されます。

  • Collections: Map/Reduce、ソート、検索、最大値、最小値、グループ化など
  • Arrays: 先頭、末尾の取得、結合、ユニークなど
  • Functions: バインド、遅延処理、後処理など
  • Objects: Key/Value、型判定など
  • Utility: エスケープ処理、IDなど
  • Chaining: チェイン処理

数が多いのでその日の気分で少しづつ紹介します。サンプルはCoffeeScriptで記述します。

インストール方法はいつも通り。

$ npm install underscore

each

eachは、配列やオブジェクトを一つ一つ処理します(イテレータ)。配列の場合、コールバックに一つの引数を指定します。オブジェクトの場合、コールバックに引数を2つ、値/キーの順で指定します。

_ = require 'underscore'

_.each [1,2,3], (n)->
 console.log n

_.each {one:1, two:2, three:3}, (value, key)->
 console.log key + '=' + value

$ coffee each.coffee 
1
2
3
one=1
two=2
three=3

map

mapは、eachに似ていますが、eachではコールバック内に処理を記述するのに対して、mapではコールバックで処理した結果を配列で返します。

_ = require 'underscore'

console.log _.map [1,2,3], (n)->
 n * 3

console.log _.map {one:1, two:2, three:3}, (value, key)->
 key + ' x 3 = ' + value * 3 
$ coffee map.coffee 
[ 3, 6, 9 ]
[ 'one x 3 = 3', 'two x 3 = 6', 'three x 3 = 9' ]

reduce

reduceは、与えられたリストをイテレータに従って処理し、一つの値を返します。この例で、nはリストのうち一つの値、memoは前の処理結果(n+memo)です。最後のmemoの10は初期値です。初期値10に対して、1を加算し11、その11に2を加算して13、さらに13に3を加算して16。

_ = require 'underscore'

result = _.reduce [1,2,3], (memo, n)->
 n + memo
, 10

console.log result
$ coffee reduce.coffee 
16

reduceRight

reduceRightは、reduceがリストを前から処理するのに対して、後ろから処理します。

_ = require 'underscore'

list = [[0, 1], [2, 3], [4, 5]]
result = _.reduceRight list, (memo, n)->
 memo.concat(n)
, []

console.log result

$ coffee reduceRight.coffee 
[ 4, 5, 2, 3, 0, 1 ]

concatは、2つの配列を結合するJavaScriptの関数です。この例では、最初に n が [4, 5] となり、memo が初期値の空の配列 [] で結合されます。次に n は [2, 3]で、memoは [4, 5] になりますので、結果は [[4, 5], [2 ,3]] となります。


関連ページ


関連ページ

0 件のコメント: