matsukaz's blog

Agile, node.js, ruby, AWS, cocos2d-xなどなどいろいろやってます

lodashでよく使う関数まとめ

lodashunderscore.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]



開発効率をUPする Git逆引き入門

開発効率をUPする Git逆引き入門

  • 作者: 松下雅和,船ヶ山慶,平木聡,土橋林太郎,三上丈晴
  • 出版社/メーカー: シーアンドアール研究所
  • 発売日: 2014/04/09
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログ (3件) を見る