15

根据我在文档中阅读的内容,_.find() 的功能与 _.some() 非常相似

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

4

2 回答 2

28

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

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


我检查了来源(1.4.4)。some并且find都在内部使用some(=== any)。因此,即使使用本机实现,some它也对find和都有好处some

于 2013-03-27T17:53:04.730 回答
3

如果你查看它的源代码,你会发现这两个是相同的,_.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;
};
于 2013-03-27T18:09:15.003 回答