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

如何在Helm模板中提取列表内指定键匹配特定值的项的属性

方案1:直接用Sprig函数实现(推荐)

可以组合使用Sprig的select和first函数直接过滤列表,不需要手动写循环:

{{- /* 筛选所有awesome为true的条目,取第一个的itemName,无匹配时返回nope */ }}
{{ (first (select "awesome" .Values.items)).itemName | default "nope" }}

方案2:手动循环实现(兼容所有版本)

你之前的代码存在3个问题:

  1. 循环内用:=会重新声明局部变量,不会修改外层的$result
  2. if判断逻辑写反,仅在已经找到结果后才会触发赋值
  3. hasKey的参数格式错误,属性名需要加引号

适配Helm 3.0+版本的写法:

{{- $result := "nope" }}
{{- range $i := .Values.items }}
  {{- if and (hasKey $i "awesome") $i.awesome (eq $result "nope") }}
    {{- $result = $i.itemName }}
  {{- end }}
{{- end }}
{{ $result }}

兼容旧版本Helm的写法:

如果使用的Helm版本不支持变量重赋值,可以用字典存储结果规避作用域限制:

{{- $ctx := dict "result" "nope" }}
{{- range $i := .Values.items }}
  {{- if and (hasKey $i "awesome") $i.awesome (eq $ctx.result "nope") }}
    {{- $_ := set $ctx "result" $i.itemName }}
  {{- end }}
{{- end }}
{{ $ctx.result }}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:48:03