gist

2012年6月19日火曜日

CoffeeScriptで学ぶ Underscore.js 11(Object編)

第11回。Object編に入りました。


keys

_.keys(object)

keysは、オブジェクト内のすべてのキーを配列にして返します。

_ = require 'underscore'

console.log _.keys {
 hoge: 'hoge'
 seven: 7
 bool: true
}
実行結果
$ coffee keys.coffee 
[ 'hoge', 'seven', 'bool' ]

values

_.values(object)

valuesは、オブジェクト内のすべての値を配列にして返します。

_ = require 'underscore'

console.log _.values {
 hoge: 'hoge'
 seven: 7
 bool: true
}
実行結果
$ coffee values.coffee 
[ 'hoge', 7, true ]

functions

_.functions(object)

functionsは、object内に存在するすべての関数をソートして配列を返します。

_ = require 'underscore'

console.log _.functions _
実行結果
$ coffee functions.coffee 
[ '_',
  'after',
  'all',
  'any',
  'bind',
  'bindAll',
  'chain',
  'clone',
  'collect',
  'compact',
  'compose',
  ...

extend

_.extend(destination, *sources)

extendは、sourcesに指定したオブジェクト内のすべてのプロパティをdestinationに統合します。destinationで既に指定済みのプロパティがあった場合、sourcesのプロパティで上書きされます。

_ = require 'underscore'

extended = _.extend {
 hoge: 'extend hoge'
 hello: (name)->
  'Hello, ' + name
}, {
 hoge: 'hoge'
 bool: false
 seven: 7
 hello: ()->
  'Hello'
}, {
 bool: true
}


console.log 'hoge=' + extended.hoge
console.log 'seven=' + extended.seven
console.log 'bool=' + extended.bool
console.log 'hello=' + extended.hello('Moe!')
実行結果
$ coffee extend.coffee 
hoge=hoge
seven=7
bool=true
hello=Hello

pick

_.pick(object, *keys)

pickは、オブジェクトの中のうち、キーを指定するとプロパティをコピーしてオブジェクトを返します。

_ = require 'underscore'

pickked = _.pick {
 'name':'山田 太郎'
 'yomi':'やまだ たろう'
 'email':'taro@yamada.me'
}, 'name', 'email'

console.log pickked
実行結果
$ coffee pick.coffee 
{ name: '山田 太郎', email: 'taro@yamada.me' }

defaults

_.defaults object, *defualts

defaultsは、オブジェクトのデフォルト値を決める時に使います。

_ = require 'underscore'

defaults = {
 'hp':20
 'mp':5
 'items':['やくそう']
 'weapons':['こんぼう']
}

hero = _.defaults {'hp':100,'weapons':['銅の剣']}, defaults

console.log hero
実行結果
$ coffee defaults.coffee 
{ hp: 100, weapons: [ '銅の剣' ], mp: 5, items: [ 'やくそう' ] }

clone

_.clone(object)

cloneは、オブジェクトのシャドウコピーを作成して返します。ネストされたオブジェクトや配列は、参照がコピーされ複製はされません。

_ = require 'underscore'

hero = {'name':'moe', 'items':[{'name':'銅の剣', 'count':5}]}
clonedHero = _.clone hero

console.log clonedHero

# クローンのネストされたオブジェクトを変更すると、、、
clonedHero.items[0].name = 'こんぼう' 

console.log hero
実行結果
$ coffee clone.coffee 
{ name: 'moe', items: [ { name: '銅の剣', count: 5 } ] }
{ name: 'moe', items: [ { name: 'こんぼう', count: 5 } ] }

tap

_.tap(object, interceptor)

tapは、オブジェクトに対して割り込み処理を実行します。このメソッドは、chainメソッドの中ですぐに結果を処理する場合に利用されるのを目的としています。

_ = require 'underscore'

results = _.chain [1,2,3,100]
.filter (num)->
 (num % 2) is 0
.tap(console.log)
.map (num)->
 num * num
.value()

console.log results
実行結果
$ coffee tap.coffee 
[ 2, 100 ]
[ 4, 10000 ]

関連ページ

0 件のコメント: