【问题标题】:Is there an equivalent of "Array.None" in JS?JS 中是否有等效的“Array.None”?
【发布时间】:2020-07-15 02:14:05
【问题描述】:

对于 LINQ 有一个类似的问题:Is there an equivalent of None() in LINQ?

集合/数组上有一些布尔方法:

我可以检查数组中是否没有元素匹配给定的函数回调

一个可能的解决方法是.filter 然后检查.length 并确保它为零:

let arr = ["a","b","c"]
// make sure that no item in array = "b"
let noBs = arr.filter(el => el === "b").length === 0

【问题讨论】:

    标签: javascript arrays ecmascript-6


    【解决方案1】:

    正如 linq 示例在逻辑上得出的结论

    None!Any 相同,因此您可以定义自己的扩展方法如下:

    let none = (arr, callback) => !arr.some(callback)
    

    然后像这样调用:

    let arr = ["a","b","c"]
    let noBs = none(arr, el => el === "b")
    

    或者如果要extend Array.proto,可以添加如下方法:

    Object.defineProperty(Array.prototype, 'none', {
        value: function (callback) { return !this.some(callback) }
    });
    

    然后这样调用:

    let arr = ["a","b","c"]
    let noBs = arr.none(el => el === "b")
    

    【讨论】:

      【解决方案2】:

      暂时没有

      目前我正在使用Array.some(),然后否定整个事情

      我个人认为 Array.none 函数会很棒

      您可以request 将其添加到 ECMA 的下一个版本中。至少可以说这看起来有点像一个过程,但如果我们想把它添加到 ECMA 中,这就是方法。

      【讨论】:

      • 警告: not everynone 不同!
      • 哦,是的,我想我的意思是! Array.any 感谢您指出这一点,将更新我的答案
      • 我认为你的意思是 Array.some(据我所知,JS 中没有 any 别名)。
      • !Array.some(...) 在每个条目都为假时为真,否则为假
      【解决方案3】:

      喜欢@KyledMit 方法。在类似的行中,使用findIndex 是另一种方式。 (find 可能不可靠,因为我们无法检查返回值)。

      const arr = ["a","b","c"]
      
      const noBs = arr.findIndex(el => el === "b") < 0;
      
      console.log(noBs)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-12
        • 2018-05-03
        • 2020-09-22
        • 2012-05-24
        • 2021-06-15
        • 2020-04-20
        • 2016-05-26
        • 2015-11-16
        相关资源
        最近更新 更多