【问题标题】:Why does Array.prototype.some return boolean? [duplicate]为什么 Array.prototype.some 返回布尔值? [复制]
【发布时间】:2014-10-24 02:19:26
【问题描述】:

每当我使用此功能时,我觉得这给我的灵活性很小。通常,当我使用此函数时,我会寻找元素的第一次出现,但它只返回 true,我觉得这有点缺乏。
我使用这个函数的主要原因是每当我找到元素时break循环,所以使用forEach会失败,因为forEach不会短路。 Array.prototype.filter 也一样。

我是否遗漏了什么,或者我是否使用for 循环来获取 JavaScript 中的第一个匹配元素?

【问题讨论】:

  • 想发布一些代码吗?

标签: javascript arrays


【解决方案1】:

它返回一个布尔值,因为这就是函数定义。它测试数组中的some(或any)元素是否满足测试。

您正在寻找first 的实现,在ECMAScript 6 中建议为.find()。这是一个 polyfill(来自 MDN 链接):

if (!Array.prototype.find) {
  Array.prototype.find = function(predicate) {
    if (this == null) {
      throw new TypeError('Array.prototype.find called on null or undefined');
    }
    if (typeof predicate !== 'function') {
      throw new TypeError('predicate must be a function');
    }
    var list = Object(this);
    var length = list.length >>> 0;
    var thisArg = arguments[1];
    var value;

    for (var i = 0; i < length; i++) {
      value = list[i];
      if (predicate.call(thisArg, value, i, list)) {
        return value;
      }
    }
    return undefined;
  };
}

【讨论】:

  • 我知道定义是这样说的。我更想问为什么。但由于它在 ES6 中,这将是我期待的另一个功能。 :) 谢谢。这正是我一直在寻找的。 (也许 TC39 中的某个人也意识到了这一点;))
  • why 是因为它就是这样做的。 :P 没有更深刻的答案了。
  • 我想知道定义背后的原因是什么时候它被包含在语言中。我想使它与every 保持一致是有意义的。
  • FWIW、anysomeeveryfirst 等是大多数函数式编程语言中存在的典型函数原语 >。 ECMAScript 并没有完全发明这些定义。这就是我想你所能得到的解释。
猜你喜欢
  • 2020-04-12
  • 1970-01-01
  • 2015-11-23
  • 1970-01-01
  • 2017-02-08
  • 2020-03-21
  • 1970-01-01
  • 2014-03-20
  • 1970-01-01
相关资源
最近更新 更多