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

如何简化JavaScript多对象属性的非空校验逻辑?

问题:简化对象多属性非空校验逻辑

我需要实现这样的逻辑:当对象values的所有指定属性均不为空字符串时,启用下一步按钮,否则禁用。

当前的代码实现如下:

const handleButton = () => {
  if(
        values.streetAdress !== ""
     && values.postalCode !== ""
     && values.city !== ""
     && values.sex !== ""
     && values.birthName !== ""
     && values.birthPlace !== ""
     && values.birthday !== ""
     && values.country !== ""
     && values.family !== ""
     && values.insuranceID !== ""
  ){
    setDisabeld(false)
  }else{
    setDisabeld(true)
  }
}

请问是否有办法一次性校验所有属性,从而简化该判断表达式?


解决方案

当然可以,你可以把需要校验的属性名整理成数组,结合数组的every()方法统一校验,代码会更简洁,也方便后续维护:

方法一:指定属性列表校验

这种方式适合只需要校验部分属性的场景,把要检查的字段列成数组,再逐一验证:

const handleButton = () => {
  // 列出所有需要校验的属性名
  const requiredFields = [
    'streetAdress', 'postalCode', 'city', 'sex', 
    'birthName', 'birthPlace', 'birthday', 'country', 
    'family', 'insuranceID'
  ];
  // 校验所有指定属性是否都不为空字符串
  const allFieldsFilled = requiredFields.every(field => values[field] !== "");
  // 直接设置按钮禁用状态(注意取反,allFieldsFilled为true时启用按钮,即setDisabled(false))
  setDisabeld(!allFieldsFilled);
}

优势:

  • 一目了然看到需要校验的字段,逻辑清晰
  • 后续新增或删除校验字段,只需修改requiredFields数组,无需改动判断逻辑
  • every()会短路执行,只要发现空字段就停止校验,性能和原代码一致

方法二:校验对象全部属性(如果所有属性都需要校验)

如果values对象的所有属性都需要检查是否为空字符串,还能进一步简化:

const handleButton = () => {
  const allFieldsFilled = Object.values(values).every(val => val !== "");
  setDisabeld(!allFieldsFilled);
}

注意:这种方式会校验values的所有属性,若只需校验部分字段,优先用第一种方法。


内容的提问来源于stack exchange,提问作者Spluli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:45:46