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

使用express-handlebars(HBS)在循环中比较字符串的问题

我来帮你搞定这个问题!你注册的if_equal辅助函数本身逻辑没问题,问题大概率出在模板里的调用方式或者字符串匹配的细节上,咱们一步步捋清楚:

首先,先把模板里的调用写法修正过来

你之前注释掉的代码只写了开头没闭合,而且正确的嵌套方式应该是把if_equal放在each循环内部,针对每个分类的title做判断。比如你想在匹配到目标字符串时做特殊处理(比如高亮、添加标记),可以这么写:

{{#each info.categories}}
  <li>
    <a href="{{this.title}}">{{this.title}}</a>
    {{#if_equal this.title "מלגזות"}}
      <!-- 这里写匹配成功后要渲染的内容,比如: -->
      <span style="color: red;">(当前选中分类)</span>
    {{else}}
      <!-- 不匹配时的内容,可选,不需要可以删掉else块 -->
    {{/if_equal}}
  </li>
{{/each}}

然后排查几个容易踩坑的点

  1. 字符串的精确匹配
    希伯来语虽然没有大小写区分,但要确保this.title和你写的"מלגזות"完全一致——比如有没有额外的空格、换行符?比如如果this.title实际是" מלגזות"(前面多了空格),就会匹配失败。你可以先在循环里临时加一行{{this.title}},看看实际渲染出来的内容是什么,或者给辅助函数加个调试日志:

    hbs.registerHelper('if_equal', function(a, b, opts) {
      console.log('对比的两个值:', a, 'vs', b); // 控制台看实际对比的内容
      if (a == b) {
        return opts.fn(this);
      } else {
        return opts.inverse(this);
      }
    });
    
  2. 上下文与属性存在性
    确认info.categories里的每个对象确实都有title属性——如果某个分类的title是undefined或者null,自然匹配不上目标字符串。

  3. 严格相等的可选优化
    如果你的场景需要严格区分类型(比如避免把字符串"123"和数字123误判为相等),可以把辅助函数里的==改成===:

    hbs.registerHelper('if_equal', function(a, b, opts) {
      if (a === b) { // 严格相等判断
        return opts.fn(this);
      } else {
        return opts.inverse(this);
      }
    });
    

按照上面的方式调整后,应该就能正常在循环内判断字符串相等了~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:21:34