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

Google Apps Script的cari函数数据不匹配时重复执行异常

Google Apps Script cari 函数运行异常修复

异常表现

  • 输入的检索关键词和待匹配数据不匹配时,代码会重复发送消息,最多重复执行12次
    异常现象截图:
    不匹配时重复发送消息
  • 输入检索关键词匹配到对应数据时,返回结果符合预期
    正常效果截图:
    匹配成功时正常返回

问题原代码

function cari(cid,cmd){
  var txt = '';
  var pola = cmd.match(/cari#(.+)/);
  if (pola[1]!=''){
    var rs = bacadata();
    for (var i=0;i<rs.length;i++) {
      if (rs[i][0] == pola[1]){
        txt = pola[1]+' adalah '+rs[i][1];
        sendMessage(cid,txt);
      } else{
        txt = 'Data '+pola[1]+' tidak ditemukan atau perintah command tidak sesuai...';
        sendMessage(cid,txt);
      }
    }
  }
}

问题原因

原代码存在3处逻辑漏洞:

  1. 判断逻辑写在循环内部,每遍历一行数据就做一次匹配校验,只要当前行不匹配关键词就立刻发送「数据不存在」提示,遍历多少行就会发多少次提示,重复12次是因为bacadata()返回的数据集总共有12行
  2. 就算中途匹配到了正确数据,循环也不会终止,会继续遍历剩余行,重复发送错误提示
  3. 缺少正则匹配结果的空值校验,如果输入命令不符合cari#xxx格式,cmd.match()会返回null,直接访问pola[1]会抛出脚本运行错误

修复后代码

function cari(cid,cmd){
  var txt = '';
  var pola = cmd.match(/cari#(.+)/);
  // 先校验正则匹配结果,避免空指针报错
  if (pola && pola[1]!=''){
    var rs = bacadata();
    var isFound = false;
    var keyword = pola[1];
    for (var i=0;i<rs.length;i++) {
      if (rs[i][0] == keyword){
        txt = keyword+' adalah '+rs[i][1];
        sendMessage(cid,txt);
        isFound = true;
        // 匹配到目标数据后立刻终止循环,避免多余遍历
        break;
      }
    }
    // 遍历完全部数据都没匹配到,才发送一次不存在提示
    if (!isFound) {
      txt = 'Data '+keyword+' tidak ditemukan atau perintah command tidak sesuai...';
      sendMessage(cid,txt);
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:09:27