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

循环校验数组对象状态异常:含NOT OK行仍触发upload API求助

问题原因与修复方案

错误原因

你的代码逻辑完全不符合需求:

  • 用forEach遍历选中行时,每遇到一个status为OK的行就调用一次API,同时遇到NOT OK的行就弹提示,导致只要选中行里同时有OK和NOT OK的行,就会出现API被调用+弹窗触发的情况。
  • 需求要求的是先检查所有选中行,只要有一个NOT OK就只弹提示,不调用API;只有全是OK时才调用API,你的逻辑顺序搞反了,而且是逐行处理,不是整体校验。
  • 另外还有大小写问题:你的判断条件是row.status==='OK',但示例数据里的异常状态是'Not ok',大小写不匹配会导致判断失效(不过你当前代码里弹窗触发了,说明实际数据可能是'NOT OK',但还是建议统一大小写比较避免问题)。

修复后的代码

onUpload(){
  const selectedRows = this.agGrid.api.getSelectedRows();
  // 检查是否存在状态不为OK的行,统一转大写避免大小写问题
  const hasInvalidRow = selectedRows.some(row => row.status.toUpperCase() !== 'OK');

  if (hasInvalidRow) {
    // 存在异常行,只弹提示
    this.isTooltipUpload = true;
    setTimeout(() => {
      this.isTooltipUpload = false;
    }, 2000);
  } else {
    // 所有行都是OK,调用一次API(如果需要逐行调用API,就把forEach放这里)
    /** upload API CALL **/
    // 如果需求是每个OK行都调用一次API,就用下面的forEach:
    // selectedRows.forEach(row => {
    //   /** upload API CALL **/
    // });
  }
}

关键说明

  • 使用Array.some()方法可以快速判断是否存在不符合条件的行,遍历到第一个异常行就停止,比forEach效率更高。
  • 用toUpperCase()统一转换为大写比较,避免因'Not ok'、'not ok'、'NOT OK'等大小写差异导致的判断错误。
  • 先做整体校验,再决定是弹提示还是调用API,完全符合需求逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:27:38