You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

函数内动态数据集校验优化:无需使用大量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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:24:06