ikemonn's blog

技術ネタをちょこちょこと

【Underscore.js】_.sampleを読んだ

jashkenas/underscore_.sampleを読んだ。

概要

_.sample(list, [n]

listからn個のランダムな値を取り出す。nが指定されない時は1つ取り出す。

var list = [1, 4, 15, 200, 3];
var x = _.sample(list);
console.log(x); // 4

ソースコード

  _.sample = function(obj, n, guard) {
    if (n == null || guard) {
      if (!isArrayLike(obj)) obj = _.values(obj);
      return obj[_.random(obj.length - 1)];
    }
    return _.shuffle(obj).slice(0, Math.max(0, n));
  };

第三引数のguardは_.mapと組み合わせて使う時にうまく動作するように指定してある。 isArrayLike(obj) = falseになるのは、listにオブジェクト等を渡した時。その場合は、プロパティvalueの中からランダムで値が取得される。

参考

jashkenas/underscore