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

基于原生JS的洪水预警系统:多值对比与全符合行展示问题

洪水预警系统:修正多行匹配与条件判断逻辑

一、先理清楚正确的条件判断逻辑

首先纠正你可能的拼写笔误:ALERT_yewoll应该是ALERT_yellow(黄色预警),避免后续逻辑出错。

洪水预警的常规逻辑是取两个水位的最大值与阈值对比,且按优先级从高到低判断(红色>橙色>黄色),具体区间定义如下:

  • 红色预警:max(level_11, level_fw) >= ALERT_red
  • 橙色预警:ALERT_orange <= max(level_11, level_fw) < ALERT_red
  • 黄色预警:ALERT_yellow <= max(level_11, level_fw) < ALERT_orange
  • 无预警:水位低于黄色阈值

这里必须保证阈值顺序是 ALERT_red > ALERT_orange > ALERT_yellow,否则判断逻辑会完全混乱。

二、修正代码以输出全部符合条件的行

你的代码只输出首个符合条件的行,大概率是因为遍历数据时遇到第一个符合条件的行就终止了(比如用了break),或者只处理了第一行数据。解决思路是遍历所有数据行,收集所有符合预警条件的结果,最后统一输出。

示例代码(Python)

假设从API获取的数据是结构化的列表字典,代码如下:

# 模拟API返回的水位数据
api_water_data = [
    {"station": "河滨站", "level_11": 4.1, "level_fw": 3.9},
    {"station": "大桥站", "level_11": 5.3, "level_fw": 5.1},
    {"station": "城郊站", "level_11": 3.2, "level_fw": 3.0},
    {"station": "港口站", "level_11": 6.2, "level_fw": 6.0}
]

# 定义预警阈值(修正拼写错误)
ALERT_yellow = 4.0
ALERT_orange = 5.0
ALERT_red = 6.0

# 收集所有触发预警的记录
alert_records = []

# 遍历每一行数据
for record in api_water_data:
    station_name = record["station"]
    l11 = record["level_11"]
    lfw = record["level_fw"]
    current_max_level = max(l11, lfw)
    alert_level = None

    # 按优先级从高到低判断预警等级
    if current_max_level >= ALERT_red:
        alert_level = "红色预警"
    elif current_max_level >= ALERT_orange:
        alert_level = "橙色预警"
    elif current_max_level >= ALERT_yellow:
        alert_level = "黄色预警"

    # 如果触发预警,加入结果列表
    if alert_level:
        alert_records.append({
            "站点名称": station_name,
            "最高水位": round(current_max_level, 1),
            "预警等级": alert_level
        })

# 输出全部符合条件的记录
for item in alert_records:
    print(f"{item['站点名称']}: 最高水位{item['最高水位']}m,触发{item['预警等级']}")

关键修正细节

  • 去掉了终止遍历的逻辑(比如break),确保所有数据行都被处理
  • 用列表alert_records存储所有符合条件的预警记录,最后统一输出
  • 取两个水位的最大值判断,符合洪水预警的实际需求(任一水位达标即触发)
  • 按高优先级到低优先级的顺序判断,避免低级预警覆盖高级预警(比如红色预警不会被橙色的判断逻辑拦截)

三、逻辑验证步骤

  1. 检查阈值顺序:确认ALERT_red > ALERT_orange > ALERT_yellow,比如红色阈值必须高于橙色,否则会出现橙色水位触发红色预警的错误
  2. 测试边界值:比如水位刚好等于ALERT_orange时,应触发橙色预警而非黄色
  3. 验证无预警场景:当两个水位都低于黄色阈值时,不会被加入结果列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:50:23