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

双层长度校验场景下如何避免嵌套if语句?

TypeScript 嵌套校验逻辑重构方案

你这段两层长度校验的逻辑,不需要靠提前return整个函数就能消除嵌套,核心是先删掉冗余判断,再把条件判断收敛到同一层级。

最推荐写法:链式调用过滤后遍历

你原来写的外层if (checkData.audience.length)本身就是冗余代码:空数组调用forEach不会执行任何回调,和套一层if的执行结果完全一致,多写这层除了加嵌套没有任何实际作用。
直接把单元素的校验转成过滤条件,链式调用走完流程就行,全程没有嵌套:

checkData.audience
  .filter((element: CheckData) => element.name.length > 0)
  .forEach(() => {
    console.log('check two');
  });

如果存在checkData.audience可能为null/undefined的边界情况,加可选链兜底即可,依然不需要嵌套:

checkData.audience
  ?.filter((element: CheckData) => element.name.length > 0)
  ?.forEach(() => {
    console.log('check two');
  });

适合复杂逻辑的写法:循环内跳过不符合项

如果遍历里要写的逻辑比较多,不想拆成filter+forEach的链式结构,直接删掉外层冗余if,在循环内部用return(forEach回调)跳过不符合条件的项就行——这里的return只是跳出当前项的回调,不会影响外层函数,完全适配你“没有外层返回值”的场景:

checkData.audience.forEach((element: CheckData) => {
  if (element.name.length <= 0) return;
  // 后续所有业务逻辑都写在这里,不需要嵌套
  console.log('check two');
});

两种写法最终执行逻辑和你原来的嵌套if完全一致,没有任何逻辑偏差,同时把两层嵌套拍平成了线性逻辑,后续加其他校验条件也不需要再叠嵌套层级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:06:30