ikemonn's blog

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

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

jashkenas/underscore_.everyを読んだ。

概要

_.every(list, [predicate], [context]

listの値をpredicateに渡した時に、すべてtrueであればtrueを返す。

var list = [1, 2, 3, 4, 5];
var x = _.every(list, function(n) {
    return n > 0;
});
console.log(x); // true

var y = _.every(list, function(n) {
    return n % 2 === 0;
});
console.log(y); // false

ソースコード

_.every = _.all = function(obj, predicate, context) {
    predicate = cb(predicate, context);
    var keys = !isArrayLike(obj) && _.keys(obj),
        length = (keys || obj).length;
    for (var index = 0; index < length; index++) {
      var currentKey = keys ? keys[index] : index;
      if (!predicate(obj[currentKey], currentKey, obj)) return false;
    }
    return true;
  };

要素の1つ1つに関数を適用して、ひとつでもfalseがあればreturnしている。

参考

jashkenas/underscore