UnderscoreJS - _.some()vs _.find()

时间:2013-03-27 17:48:16

标签: javascript underscore.js

从我在文档中看到的内容来看,_. find()函数与_.some()

非常相似

有谁知道两者之间是否存在(性能)优势?

2 个答案:

答案 0 :(得分:12)

它们的性能特征可能相同,假设您想知道在特定情况下使用findsome。他们都是以同样的方式懒惰。

不同之处在于输出。 find将返回值,some将返回boolean


我检查了源(1.4.4)。 somefind都在内部使用some(=== any)。因此,即使使用some的原生实现,它也会同时使findsome受益。

答案 1 :(得分:2)

如果你查看它的来源,你会发现那两个是相同的,_。find实际上叫_.some。

_.find = _.detect = function(obj, iterator, context) {
  var result;
  any(obj, function(value, index, list) {
    if (iterator.call(context, value, index, list)) {
      result = value;
      return true;
    }
  });
  return result;
};

var any = _.some = _.any = function(obj, iterator, context) {
  iterator || (iterator = _.identity);
  var result = false;
  if (obj == null) return result;
  if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);
  each(obj, function(value, index, list) {
    if (result || (result = iterator.call(context, value, index, list))) return breaker;
  });
  return !!result;
};