lodashでよく使う関数まとめ
lodash は underscore.js とほとんど同じ機能を持つユーティリティライブラリです。
似たような関数名があったり、破壊的メソッドだったりして、正しい使い方をちょいちょい忘れてしまうので、よく使う関数を逆引き形式でまとめてみました。日本語の記事もあんまりなかったので紹介の意味でも。
他にもいろいろ機能はあるので、気になる人は lodashのdocs を見ると良いかと。
Array操作
データ取得
2つの配列間で、一致しない値だけ取得する
_.difference(array, array)
_.difference([1, 2, 3, 4, 5], [5, 2, 10]); // → [1, 3, 4]
複数の配列の積集合(共通する値)を取得する
_.intersection(array...)
_.intersection([1, 2, 3], [5, 2, 1, 4], [2, 1]); // → [1, 2]
複数の配列の和集合(重複を除いた全ての値)を取得する
_.union(array...)
_.union([1, 2, 3], [5, 2, 1, 4], [2, 1]); // → [1, 2, 3, 5, 4]
配列から一意な値を取得する
_.uniq(array, [isSorted=false], callback)
_.uniq([1, 2, 1, 3, 1]); // → [1, 2, 3] _.uniq([1, 1, 2, 2, 3], true); // → [1, 2, 3] // ソートされてない場合は "isSorted" に "false" を指定しないと一意とならない _.uniq([1, 3, 2, 2, 3], true); // → [1, 3, 2, 3] // callbackで値を変換してから一意かどうか判定することも可能 _.uniq(['A', 'b', 'C', 'a', 'B', 'c'], function(letter) { return letter.toLowerCase(); }); // → ['A', 'b', 'C'] // callbackに "_.pluck" の省略形式を指定することも可能(プロパティの値で判定) _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); // → [{ 'x': 1 }, { 'x': 2 }]
配列から指定した値を除外した値を取得する
_.without(array, value...)
_.without([1, 2, 1, 0, 3, 1, 4], 0, 1); // → [2, 3, 4]
データ削除
配列からfalseyな値を削除する(破壊的メソッド)
falseyな値とは、false, null, 0, "", undefined, NaN など。
_.compact(array)
_.compact([0, 1, false, 2, '', 3]); // → [1, 2, 3]
配列から指定した値を削除する(破壊的メソッド)
_.pull(array, value...)
var array = [1, 2, 3, 1, 2, 3]; _.pull(array, 2, 3); // → [1, 1] console.log(array); // → [1, 1]
配列から条件に一致した値を削除する(破壊的メソッド)
_.remove(array, callback)
var array = [1, 2, 3, 4, 5, 6]; var evens = _.remove(array, function(num) { return num % 2 == 0; }); console.log(array); // → [1, 3, 5] console.log(evens); // → [2, 4, 6]
Collection(Arrays or Objects)操作
データ取得
Collectionから条件に一致した値だけを取得する
_.filter(collection, callback)
var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; }); // → [2, 4, 6] var characters = [ { 'name': 'barney', 'age': 36, 'blocked': false }, { 'name': 'fred', 'age': 40, 'blocked': true } ]; // callbackに "_.pluck" の省略形式を指定することも可能(プロパティの値で判定) _.filter(characters, 'blocked'); // → [{ 'name': 'fred', 'age': 40, 'blocked': true }] // callbackに "_.where" の省略形式を指定することも可能(プロパティの値との比較で判定) _.filter(characters, { 'age': 36 }); // → [{ 'name': 'barney', 'age': 36, 'blocked': false }]
Collectionから条件に一致しなかった値だけを取得する
_.reject(collection, callback)
var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; }); // → [1, 3, 5] var characters = [ { 'name': 'barney', 'age': 36, 'blocked': false }, { 'name': 'fred', 'age': 40, 'blocked': true } ]; // callbackに "_.pluck" の省略形式を指定することも可能(プロパティの値で判定) _.reject(characters, 'blocked'); // → [{ 'name': 'barney', 'age': 36, 'blocked': false }] // callbackに "_.where" の省略形式を指定することも可能(プロパティの値との比較で判定) _.reject(characters, { 'age': 36 }); // → [{ 'name': 'fred', 'age': 40, 'blocked': true }]
Collectionから指定したプロパティの値を取得する
_.pluck(collection, property)
var characters = [ { 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 } ]; _.pluck(characters, 'name'); // → ['barney', 'fred']
Collectionから指定したプロパティの値に一致する値だけを取得する
_.where(collection, props)
var characters = [ { 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }, { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] } ]; _.where(characters, { 'age': 36 }); // → [{ 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }] _.where(characters, { 'pets': ['dino'] }); // → [{ 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }]
Collectionからmap処理で値の配列を取得する
_.map(collection, callback)
_.map([1, 2, 3], function(num) { return num * 3; }); // → [3, 6, 9] _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num, key) { return num * 3; }); // → [3, 6, 9] (Objectの場合は、順序は実行環境に依存する) var characters = [ { 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 } ]; // callbackに "_.pluck" の省略形式を指定することも可能(プロパティの値で判定) _.map(characters, 'name'); // → ['barney', 'fred']
Collectionからreduce処理で値を取得する
_.reduce(collection, callback)
var sum = _.reduce([1, 2, 3], function(sum, num) { return sum + num; }); // → 6 var mapped = _.reduce({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) { result[key] = num * 3; return result; }, {}); // → { 'a': 3, 'b': 6, 'c': 9 }
Collectionから最小値を取得する
_.min(collection, callback)
_.min([4, 2, 8, 6]); // → 2 var characters = [ { 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 } ]; _.min(characters, function(chr) { return chr.age; }); // → { 'name': 'barney', 'age': 36 }; // callbackに "_.pluck" の省略形式を指定することも可能(プロパティの値で判定) _.min(characters, 'age'); // → { 'name': 'barney', 'age': 36 };
Collectionから最大値を取得する
_.max(collection, callback)
_.max([4, 2, 8, 6]); // → 8 var characters = [ { 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 } ]; _.max(characters, function(chr) { return chr.age; }); // → { 'name': 'fred', 'age': 40 }; // callbackに "_.pluck" の省略形式を指定することも可能(プロパティの値で判定) _.max(characters, 'age'); // → { 'name': 'fred', 'age': 40 };
Collectionのサイズを取得する
_.size(collection)
_.size([1, 2]); // → 2 _.size({ 'one': 1, 'two': 2, 'three': 3 }); // → 3 _.size('pebbles'); // → 7
Collectionに指定した値が含まれているかどうかを確認する
_.contains(collection, target)
_.contains([1, 2, 3], 1); // → true _.contains({ 'name': 'fred', 'age': 40 }, 'fred'); // → true _.contains('pebbles', 'eb'); // → true
データ操作
Collectionの全ての要素に対して繰り返し処理をする
_.each(collection, callback)
_([1, 2, 3]).each(function(num) { console.log(num); }).join(','); // → 1 // → 2 // → 3 // → '1,2,3' _.each({ 'one': 1, 'two': 2, 'three': 3 }, function(num, key) { console.log(key+' : '+num); }); // → one : 1 // → two : 2 // → three : 3
Collectionを指定した条件でソートする
_.sortBy(collection, callback)
_.sortBy([1, 2, 3], function(num) { return Math.sin(num); }); // → [3, 1, 2] var characters = [ { 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }, { 'name': 'barney', 'age': 26 }, { 'name': 'fred', 'age': 30 } ]; // callbackに "_.pluck" の省略形式を指定することも可能(プロパティの値で判定) _.sortBy(characters, 'age'); // → [ { name: 'barney', age: 26 }, { name: 'fred', age: 30 }, { name: 'barney', age: 36 }, { name: 'fred', age: 40 } ]
Collectionを配列に変換する
_.toArray(collection)
_.toArray({ 'a': 1, 'b': 2, 'c': 3 }); // → [1, 2, 3]
- 作者: 松下雅和,船ヶ山慶,平木聡,土橋林太郎,三上丈晴
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2014/04/09
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る
[ミズノ] Mizuno TRANS DASH α-2 [JUNIOR] K1GC1422 24 (ホワイト×ブルー/245)
- 出版社/メーカー: MIZUNO(ミズノ)
- メディア: ウェア&シューズ
- この商品を含むブログを見る