Skip to content

在JavaScript数组中检查所有值的真假性

如在之前的一篇文章中提到的,JavaScript在布尔上下文中使用类型转换,例如条件语句。这意味着根据在布尔上下文中的求值方式,值被认为是真值或假值。结合使用 Boolean 函数和对一组值进行真值检查变得非常简单。

检查数组中的所有值是否为真值

使用 Array.prototype.every(),我们可以轻松地检查数组中的所有值是否为真值。Boolean 函数可以作为默认回调函数使用,以检查所有值是否为真值,但也可以指定自定义回调函数。

const all = (arr, fn = Boolean) => arr.every(fn);

all([4, 2, 3], x => x > 1); // true
all([1, 2, 3]); // true

检查数组中是否有任何值为真值

使用 Array.prototype.some(),我们可以检查数组中是否有任何值为真值。Boolean 函数可以作为默认回调函数使用,以检查是否有任何值为真值,但也可以指定自定义回调函数。

const any = (arr, fn = Boolean) => arr.some(fn);

any([0, 1, 2, 0], x => x >= 2); // true
any([0, 0, 1, 0]); // true

检查数组中的所有值是否为假值

类似地,Array.prototype.some() 可以用来检查数组中是否有任何值为假值。同样,Boolean 函数可以作为默认的回调函数,但你也可以指定一个自定义的回调函数。

const none = (arr, fn = Boolean) => !arr.some(fn);

none([0, 1, 3, 0], x => x == 2); // true
none([0, 0, 0]); // true

检查所有对象是否具有给定的属性

进一步地,Array.prototype.every() 可以用来检查数组中的所有对象是否具有给定的属性。这对于验证数据非常有用。简单地检查属性的存在与否将返回一个真值或假值,取决于属性是否存在。

const truthCheckCollection = (collection, pre) =>
  collection.every(obj => obj[pre]);

truthCheckCollection(
  [
    { user: 'Tinky-Winky', sex: 'male' },
    { user: 'Dipsy', sex: 'male' },
  ],
  'sex'
); // true