函数内动态数据集校验优化:无需使用大量if else实现多布尔变量赋值
通用动态校验方案
核心逻辑梳理
原代码中大量if-else本质是枚举所有校验失败的组合,实际核心规则可简化为:
- 逐一对每个字段校验:判断输入值是否存在于对应数据源数组中
- 标记所有校验不通过的字段,将对应
*Empty属性设为true - 只要存在至少一个校验不通过的字段,返回0
- 所有字段全部校验通过才返回1
优化后通用实现
该方案支持任意数量的校验项,调整校验字段只需修改配置数组,无需改动核心逻辑:
// 入参直接用剩余参数接收,支持3个/7个或更多字段 dataValidation = (...inputVals) => { // 校验配置:新增字段只需在此加对应配置项即可,无需改逻辑 const validateConfig = [ { stateKey: 'datafirst', emptyFlag: 'firstEmpty' }, { stateKey: 'datasecond', emptyFlag: 'secondEmpty' }, { stateKey: 'datathird', emptyFlag: 'thirdEmpty' }, // 7个字段的场景直接在此新增4项配置即可 // { stateKey: 'datafourth', emptyFlag: 'fourthEmpty' }, // { stateKey: 'datafifth', emptyFlag: 'fifthEmpty' }, // { stateKey: 'datasixth', emptyFlag: 'sixthEmpty' }, // { stateKey: 'dataseventh', emptyFlag: 'seventhEmpty' }, ] let hasInvalid = false // 遍历所有校验项统一处理 validateConfig.forEach((config, index) => { // 先重置标识为false,避免上次校验结果残留 this[config.emptyFlag] = false // 执行校验逻辑 const checkRes = this.state[config.stateKey].findIndex(item => item.value === inputVals[index]) if (checkRes === -1) { this[config.emptyFlag] = true hasInvalid = true } }) // 和原逻辑返回值保持一致 return hasInvalid ? 0 : 1 }
方案优势
- 无冗余代码:无论多少个校验项,核心逻辑代码固定,不需要新增任何if-else分支
- 可维护性强:调整校验字段只需修改配置数组,不需要改动核心校验逻辑
- 扩展性好:如果后续需要新增校验规则,只需在配置项加对应字段,同步调整遍历逻辑即可
内容的提问来源于stack exchange,提问作者John Ken
相关产品推荐
相关产品推荐

