尋常でないもふもふ

a software engineer blog

lodashでよくつかう関数

JavaScript でコード書く時に lodash 使わないとかもう意味わかんないレベル。競合に underscore があるけど、lodash の方が開発スピード(≒コミット数)に分がある。
両者に git log --reverse で初回コミット(2009年8月25日)確認して気づいたけど、元は同じソースでどっかのタイミングで lodash に分岐した模様。

ライブラリ コミット数 バージョン
lodash 4,953 v3.7.0
underscore 1,995 v.1.8.3

(2015-04-23調べ)

なので、迷ったら lodash で良い。

_.each

最近はもう for 文とかあまり使ってない。

var numbers = [1, 2, 3, 5, 7, 11];
_.each(numbers, function(n) {
  console.log(n);
});

使いわける機会があるとすれば、return, break, continue 文を使いたい場合。これは for 文のが読み易い。全走査したい場合はもう全部 _.each で良い。

_.map

オブジェクトの一要素を配列にしたいときにかなり良く使う。 例えばソーシャルゲームのカード情報を持つ card というオブジェクトがあるとする。

var card = {
  cardId: 'golem',
  name: 'ゴーレム',
  parameter: {
    atk: 2300,
    def: 1500,
    spd: 800
  }
};

こんな感じのモンスターを表すオブジェクトが複数あリ Array 型か Object 型 だったとする。ここから cardId のだけの配列を作りたい場合。以下にように書くだけで済む。

var cardIds = _.map(cards, 'cardId');

_.map を知らない人はこういう書き方になるので冗長。

var cardIds = [];
_.each(cards, function(card) {
  cardIds.push(card.cardId);
});

lodash を知らない人はこういう書き方になってもっと冗長。

var cardIds = [];
for (var i = 0, len = cards.length; i < len; i++) {
  var card = cards[i];
  cardIds.push(card.cardId);
});

_.sum

Array や Object の数値を合計したいとき用。

var array = [1, 10, 100];
var obj = { a: 2, b: 20, c: 200 };
var total1 = _.sum(array); //111
var total2 = _.sum(obj); //222
var array = [
  { id: 'key1', quantity: 3 },
  { id: 'key2', quantity: 30 },
  { id: 'key3', quantity: 300 }
];
var total = _.sum(array, 'quantity'); //333

_.size

var fruitsArray = ['apple', 'orange', 'grape', 'melon'];
var fruitsObj = { apple: 298, orange: 480, grape: 380, melon: 2800 };
_.size(fruitsArray); //4
_.size(fruitsObj); //4

配列なら length プロパティがあるので、fruitsArray.length でサイズがわかるけど、オブジェクトは Object.keys(fruitsObj).length しないといけなくて冗長。 _.size なら一発。

_.cloneDeep

_.filter

_.reject

_.sortBy

_.contains

_.find

_.values

_.pluck

_.memoize