JS中是否有类似于"Array.None"的等效方法?

30

对于 LINQ,有一个类似的问题:LINQ 中是否有与 None() 等效的方法?

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

我能否检查数组中没有元素与给定的函数回调匹配

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

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

62

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

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

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

然后像这样调用:

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

或者如果你想要扩展 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")

10

目前不行。

目前我正在使用Array.some()然后将整个结果取反。

个人认为有一个Array.none函数会很棒。

你可以请求在下一版ECMA发布时将其添加进去。看起来这是一个繁琐的过程,但如果我们想要将其添加到ECMA中,这就是方法。


5
警告:'not every'与'none'不是相同的概念!请注意区分。 - leun4m
哦,是的,我想我是指Array.any。谢谢你指出来,我会更新我的答案。 - Max Carroll
3
我认为你指的是 Array.some(据我所知,在JS中没有 any 的别名)。 - charles-allen
当每个条目都为假时,!Array.some(...)将为真,否则为假。 - Nicholas Hamilton

2

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

const arr = ["a","b","c"]

const noBs = arr.findIndex(el => el === "b") < 0;

console.log(noBs)


-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接