统计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
相关产品推荐
相关产品推荐

