一次性检查大量变量的真实性
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()
让用户更难通过输入充满空格的字符串来绕过表单。根据您的需要进行调整。
我有一个大表单,有很多字段和一个特殊的处理函数
在函数开头声明的几个不同类型的变量
我想检查用户是否在函数执行前设置了所有变量
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()
让用户更难通过输入充满空格的字符串来绕过表单。根据您的需要进行调整。