You need to enable JavaScript to run this app. 统计AVAILABLE与NOT_AVAILABLE数量时为何if语句未按预期执行?
优惠活动
大模型
产品
解决方案
定价
更多

统计AVAILABLE与NOT_AVAILABLE数量时为何if语句未按预期执行?

代码存在的核心问题

1. 正则统计存在嵌套干扰

当前使用的/AVAILABLE/g正则没有加独立匹配边界,会把所有包含"AVAILABLE"子串的文本全部计入Count_available。
由于NOT_AVAILABLE本身由NOT_前缀和AVAILABLE子串拼接组成,只要出现1个NOT_AVAILABLE,Count_available就会被统计到至少1次,直接触发第一个if分支,完全跳过后续对Count_unavailable ==12的判断逻辑。

2. 分支映射完全和需求相反

对照需求规则:

  • NOT_AVAILABLE计数为12 → 发送值1
  • 存在至少1个独立AVAILABLE关键词 → 发送值0
    但代码里的分支赋值和规则完全颠倒:
  • 判断到Count_available >=1时,设置的发送值为1
  • 判断到Count_unavailable ==12时,设置的发送值为0
    这种映射会导致结果完全反向。

3. 变量初始化缺失

直接在if分支内用var声明jsondata,如果两个判断分支都不满足,jsondata会处于未定义状态,容易引发后续流程异常。


修正方案

需要调整两个核心逻辑:

  • 统计AVAILABLE计数时,排除被NOT_前缀包裹的子串,确保统计的是独立出现的AVAILABLE关键词
  • 按照需求调整分支判断优先级和对应的值映射:只要存在独立AVAILABLE就发送0,否则再判断NOT_AVAILABLE计数是否为12,满足就发送1

修正后的参考代码:

// 统计独立AVAILABLE:排除NOT_AVAILABLE中嵌套的AVAILABLE子串
const Count_available = (rootObj.match(/(?<!NOT_)AVAILABLE/g) || []).length
// 统计NOT_AVAILABLE出现次数
const Count_unavailable = (rootObj.match(/NOT_AVAILABLE/g) || []).length

// 提前初始化对象,避免未定义问题
let jsondata = {}

// 优先判断:存在独立AVAILABLE → 发送0
if (Count_available >= 1) {
  jsondata = {
    "type": "SberLogistic.Availability",
    "series": [{
      "timeseriesId": "custom:syntheticmonitors.availability",
      "dimensions": {
        "config_id": "CI02874375"
      },
      "dataPoints": [
        [Number(new Date()), 0]
      ]
    }]
  }
// 其次判断:NOT_AVAILABLE计数为12 → 发送1
} else if (Count_unavailable === 12) {
  jsondata = {
    "type": "SberLogistic.Availability",
    "series": [{
      "timeseriesId": "custom:syntheticmonitors.availability",
      "dimensions": {
        "config_id": "CI02874375"
      },
      "dataPoints": [
        [Number(new Date()), 1]
      ]
    }]
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.07 19:06:01