Hugo:如何将map转换为键值交替的数组?
如何将Go模板中的Map转换为键值对数组?
我们可以用dict函数快速创建键值对Map:
{{ $m := dict "a" "b" "c" "d" }}
但querify函数不支持直接传入Map,我们需要先把Map转换成键值依次排列的数组(比如["a", "b", "c", "d"]),再传入该函数。
基础实现(无序)
通过range遍历Map的键值对,逐个把键和值追加到空切片里即可:
{{ $m := dict "a" "b" "c" "d" }} {{ $arr := slice }} {{ range $k, $v := $m }} {{ $arr = $arr | append $k $v }} {{ end }} {{/* 展开切片传入querify */}} {{ $queryStr := querify $arr... }}
slice用于初始化一个空切片- 遍历Map时,每次把当前键
$k和值$v追加到切片中 - 最后用
...语法展开切片,作为querify的参数传入
有序实现(按键排序)
Go模板中Map的遍历顺序是随机的,如果需要键值对按固定顺序排列,可以先提取所有键并排序,再按排序后的键遍历Map:
{{ $m := dict "a" "b" "c" "d" }} {{/* 提取所有键到切片 */}} {{ $keys := slice }} {{ range $k := $m }} {{ $keys = $keys | append $k }} {{ end }} {{/* 对键进行排序 */}} {{ $sortedKeys := sort $keys }} {{/* 按排序后的键生成有序数组 */}} {{ $arr := slice }} {{ range $k := $sortedKeys }} {{ $arr = $arr | append $k (index $m $k) }} {{ end }} {{ $queryStr := querify $arr... }}
内容的提问来源于stack exchange,提问作者Alexey Inkin
相关产品推荐
相关产品推荐

