【问题标题】:Why don't Array.prototype.some() return true for an empty set? [duplicate]为什么 Array.prototype.some() 不为空集返回 true? [复制]
【发布时间】:2020-04-12 19:45:44
【问题描述】:

我刚刚在 Array.prototype.every() 的 MDN 页面上找到了这篇文章:

every 就像数学中的“所有人”量词。特别是,对于一个空数组,它返回 true。 (vacuously true 空集的所有元素都满足任何给定条件。)

确实如此,我们可以看到:

console.log([].every(a => a === "any possible value here"))

但是:

console.log([].some(a => a === "any possible value here"))

问题:

有被关闭的风险,基于意见,这是我的问题:为什么 ECMA 不选择将 Array.prototype.some() 的回调视为空数组的空数组?

在我看来,如果 “空集的所有元素都满足任何给定条件”,正如 MDN 页面所说,那么它遵循 “它空集的任何元素满足任何给定条件是空洞的”。例如,如果我们使用维基百科的例子,

房间里所有手机都打开和关闭

我们可以说“房间里的一些手机已关闭”同样(并且空洞地)是正确的。不是这样吗?

【问题讨论】:

  • 空集中不存在满足任何给定条件的成员也是空洞的事实。我会将“房间里的一些手机关机”解释为“这个房间里有没有手机关机”。
  • 这里的比喻是错误的。正确的类比是“这个房间里有一些手机关机了”。它可能是唯一的,也可能不是,关键是它存在。另一方面,房间里的所有手机可能都是0
  • some 通常是一个肯定的断言,即存在至少一个某事或其他。一个空集实现没有多大意义。
  • @Megapteranovaeangliae:“every”基本上是“some”与否定条件的否定:“every(condition)”表示“not(some(not(condition))”。如果被接受作为一个有效的转换,那么“every”和“some”必须在空集上提供相反的值。

标签: javascript


【解决方案1】:

使用.every,您是在询问列表中的所有项目是否都满足条件。如果该列表为空,那么没有项目满足条件。存在的每个项目(没有)都满足给定条件,所以.every 是空虚的。

使用.some,您是在询问列表中的任何 项是否满足条件。如果没有项目,则没有项目满足条件。所以不,空列表中的任何内容都不能满足条件,而且它是空虚的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-10
    • 2014-12-20
    • 1970-01-01
    • 2011-12-14
    • 2015-06-22
    • 2011-01-12
    相关资源
    最近更新 更多