如何使用Mustache模板从字符串列表生成无尾逗号的term子句动态列表
模板渲染消除JSON数组尾逗号的解决方案
你当前使用的是类Mustache/Handlebars模板语法,下面提供四种可落地的方案:
方案1:利用模板引擎内置的最后一位判定变量(推荐)
如果使用Handlebars等支持上下文变量的模板引擎,可直接通过@last内置变量判断是否为数组最后一位,仅非最后一位时输出逗号:
"should": [ {{#each items}} { "term": { "mycolor" : "{{.}}" } }{{#unless @last}},{{/unless}} {{/each}} ]
同理也可以用首位判定的写法,把逗号放在元素前,避免末尾多余逗号:
"should": [ {{#each items}} {{^@first}},{{/@first}} { "term": { "mycolor" : "{{.}}" } } {{/each}} ]
方案2:预处理数据追加标志位(适配原生Mustache)
如果你使用的原生Mustache没有内置@last变量,可以在渲染前对原数据做预处理,给每个元素追加是否为最后一位的标志位:
// 预处理示例(JS代码) const processedItems = items.map((item, index) => ({ value: item, isLast: index === items.length - 1 }))
对应修改模板即可:
"should": [ {{#processedItems}} { "term": { "mycolor" : "{{value}}" } }{{^isLast}},{{/isLast}} {{/processedItems}} ]
方案3:直接序列化JSON对象(最稳妥)
如果你的场景允许手动构造对象,不需要硬拼接模板,直接构造目标JS对象后用JSON.stringify输出即可,从根源避免语法错误:
// JS代码示例 const target = { should: items.map(color => ({ term: { mycolor: color } })) } // 第二个参数为替换规则,第三个参数为缩进空格数,直接输出格式化后的合法JSON const renderResult = JSON.stringify(target, null, 2)
内容的提问来源于stack exchange,提问作者Logan Yang
相关产品推荐
相关产品推荐

