一次性检查大量变量的真实性

Checking lots of variables for truthiness in a single pass

我有一个大表单,有很多字段和一个特殊的处理函数
在函数开头声明的几个不同类型的变量

我想检查用户是否在函数执行前设置了所有变量

const a1 = true, a2 = "str", a3 = { b: true }, a4 = [], a5 = "";

// Variant 1: old school
if (!(a1 && a2 && a3 && a4 && a5))
  return toast.error('Please fill out all fields');

// Variant 2: array aggregation
if (!Array.of(a1, a2, a3, a4, a5).every(Boolean))
  return toast.error('Please fill out all fields');

我想捕获 a5,因为它是一个空字符串

如果我们有 5 个以上的变量并且不是很优雅,则变体 1 不可读
变体 2 更优雅和清晰,但不适用于非 Boolean

类型的变量

如何一次检查多个变量?

这对你有用吗?

const hasTruthyInput = v => typeof v === 'string' ? v.trim().length > 0 : Boolean(v);

// Variant 2: array aggregation
if (!Array.of(a1, a2, a3, a4, a5).every(hasTruthyInput))
  return toast.error('Please fill out all fields');

我使用 v.trim() 让用户更难通过输入充满空格的字符串来绕过表单。根据您的需要进行调整。