我有一系列哈希:
a = [{a:"ahmed", b: "gaber"}, {a: "biga", b: "gaber"}]
我想将数组映射到逗号分隔的字符串,每个分隔的部分是散列值的串联。 在ruby中,这将写成:
a.map {|o| o[:a] + o[:b] }.join(",")
我怎么能用Liquid写这个?
答案 0 :(得分:1)
如果您直接写入输出,则可以使用for
标记,例如:
{% for item in items %}{% if forloop.first == false %},{% endif %}{{ item.a }} {{ item.b }}{% endfor %}
==> "ahmed gaber,biga gaber"
但是,如果您尝试assign
变量,我不会认为有一种方法可以纯粹用液体做,因为没有过滤器是相当于ruby map
函数。我能想到的最接近的是预处理列表,看起来像这样:
a = [{a:"ahmed", b: "gaber", c: "ahmed gaber"},
{a: "biga", b: "gaber", c: "biga gaber"}]
然后使用液体map
来取消" c"每个哈希的字段:
{{ assign csv = items | map: "c" | join: ","}}
The result is: {{ csv }}
==> "ahmed gaber,biga gaber"
答案 1 :(得分:0)
Liquid有一个数组的映射过滤器,但它只允许您从数组中的每个对象访问一个属性: https://docs.shopify.com/themes/liquid-documentation/filters/array-filters#map
在这里迭代Liquid中的哈希有一个非常彻底的答案: Iterate over hashes in liquid templates
使用上述答案作为模板,您可以按照使用这些标记指定的方式迭代(并呈现)数据:
{% for name in a %}
{{ name.a }} {{ name.b }}{% unless forloop.last %},{% endunless %}
{% endfor %}
此标记的另一个部分是在循环内使用forloop
变量。有了这个,我们可以放置一个逗号,除非我们在数组的最后一个条目。
更多关于液体forloops(以及几乎所有其他液体)的信息,请点击此处:https://github.com/Shopify/liquid/wiki/Liquid-for-Designers