如何确保数组无null值?表单提交前数组验证问题求助
解决表单输入数组的同步验证问题
嘿,我来帮你理清楚问题出在哪,以及怎么搞定它~
首先,你用_.forEach的思路走不通:_.forEach里的return false只会跳过当前这一轮迭代,不会终止整个循环,也没法让外层函数直接返回false。所以不管数组里有没有null值,forEach跑完之后,后面的alert('Can submit !')都会照常执行。
然后你尝试的Promise.all也用错了场景——Promise.all是用来处理一组异步Promise任务的,而你的fields数组里都是同步的状态值(比如选中的选项、日期),它会直接把这些值包装成已resolve的Promise,自然会直接进入then回调,完全起不到验证作用。
正确的同步验证方式
对于这种同步的数组验证,用数组的some或者every方法最合适,这两个方法就是专门用来判断数组元素是否符合某个条件的:
方法1:用some检查是否存在空值
const fields = [ this.state.workshopSelected, this.state.countrySelected, this.state.productionTypeSelected, this.state.numEmployeesSelected, this.state.startAt ]; // 检查数组中是否有null值 const hasEmptyField = fields.some(field => field === null); if (hasEmptyField) { alert('请填写所有必填字段!'); return; // 直接阻止后续的提交逻辑 } // 所有字段都不为null,才执行提交 alert('Can submit !');
方法2:用every确认所有字段都有效
const allFieldsValid = fields.every(field => field !== null); if (allFieldsValid) { alert('Can submit !'); } else { alert('请填写所有必填字段!'); }
这两个方法都会遍历数组并返回一个布尔值,直接帮你判断是否通过验证,比forEach更适配这种场景。
如果之后你需要做异步验证(比如每个字段要发请求去后端校验),那时候才需要用到Promise.all——把每个字段的异步校验包装成Promise,然后用Promise.all等待所有校验完成后再判断结果。
内容的提问来源于stack exchange,提问作者s-leg3ndz
相关产品推荐
相关产品推荐

