Railsの便利メソッドをlodashでやると

日常的にRailsでサーバ側を書いていても、ふとした時にjs書かないといけない時ってありますよね。
そのほかにも、これまでサーバ側でRuby書いてきたけど、せっかくだからフロント側も勉強したいなみたいな形で
Jsを触り始めることもあるかと思います。

jsもES6以降で便利なメソッドも増えたみたいですが、仕事で使ってみるとついついlodashとかライブラリを使いたくなってしまいます。
そんなこんなで、Railsのメソッドをlodashでやるには?みたいなところをまとめてみました。

 

slice

 

railsのsliceはハッシュから必要なキーだけを取得して返却してくれます。これがActiveRecordのオブジェクトにも
使えたりして便利なので、Jsでも同じことがやりたい!!となると思います。

 

rails


fruit = { apple: 'red', banana: 'yellow', cucumuber: 'green'}
fruit.slice(:apple, :banana)
#  {:apple=>"red", :banana=>"yellow"}

lodash


const fruit = { apple: 'red', banana: 'yellow', cucumuber: 'green'}
_.pick(fruit, ['apple', 'banana'])
// { apple: 'red', banana: 'yellow' }

 

except

 

exceptはsliceの逆で、ハッシュのキーから不要なものを取り除いてくれます。

rails


fruit = { apple: 'red', banana: 'yellow', cucumuber: 'green'}
fruit.except(:apple, :banana)
# {:cucumuber=>"green"}

lodash


const fruit = { apple: 'red', banana: 'yellow', cucumuber: 'green'}
_.omit(fruit, ['apple', 'banana'])
// { cucumuber: 'green' }

 

Pluck

 

pluckは配列のハッシュから、指定したキーの配列で返却してくれます。lodashでは、0.4以降pluckは廃止されmapで代用できるようです。

rails

array = [
 { id: 1, name: 'John', age: 19 },
 { id: 2, name: 'Mary', age: 30 },
 { id: 3, name: 'Smith', age: 25 }
]
array.pluck(:name)
# ["John", "Mary", "Smith"]

lodash

array = [
 { id: 1, name: 'John', age: 19 },
 { id: 2, name: 'Mary', age: 30 },
 { id: 3, name: 'Smith', age: 25 }
]

array.pluck(:name)
_.map(array, 'name')
// ["John", "Mary", "Smith"]

 

配列の引き算(差集合)

 

これはRails(Active Support) というよりはRubyですが、

Ruby(Rails)


 [1, 2, 3] - [1, 3]
# [2]

loadash

_.diffrence([1,2,3], [1,3])
// [2]

 

Compact

 

compactはnilであるハッシュのキーを取り除いたハッシュを返却します。
微妙にい意味合いは違いますが、lodashでもfalseyなkeyをオブジェクトから取り除いてくれます。

Rails(Ruby)

fruit = { apple: 'red', banana: nil, cucumuber: 'green'}
fruit.compact
# {:apple=>"red", :cucumuber=>"green"}

lodash

fruit = { apple: 'red', banana: null, cucumuber: 'green'}
_.omitBy(fruit, _.isNull)
// { apple: 'red', cucumuber: 'green' }

 

ほかにもありそうですが一旦ここまでで

ちょっとほかにもありそうですが、今思いつくのはここまでですので、一旦ここで区切らせて頂きます。
今思いましたが、ほかにもtapなどなどjsで再現したい関数というのはいくつかあるので続編もできれば
書きたいと思っています。

では、今回は一旦ここまでで

Rails

Posted by version1