大部分液体"过滤器"实际上是" map" s在函数式编程意义上:你接受一个数组,你将一个函数应用于每个元素并返回转换后的数组。我想改为"过滤":我想只返回数组中符合特定条件的那些项目。我怎么能这样做?
具体来说,我正在尝试改进此模板:
Authors:
{% for c in site.data["contributors"] %}
{% assign contributor = c[1] %}{% if contributor.role contains "author" %}{{contributor.name.given}} {{contributor.name.family}}{% endif %}{% endfor %}
美化,看起来像这样:
Authors:
{% for c in site.data["contributors"] %}
{% assign contributor = c[1] %}
{% if contributor.role contains "author" %}
{{contributor.name.given}} {{contributor.name.family}}
{% endif %}
{% endfor %}
其数据如下所示:
ianbarber:
name:
given: Ian
family: Barber
org:
name: Google
unit: Developer Relations
country: UK
role:
- engineer
homepage: http://riskcompletefailure.com
google: +ianbarber
twitter: ianbarber
email: ianbarber@google.com
description: "Ian is a DRE"
samdutton:
name:
given: Sam
family: Dutton
org:
name: Google
unit: Developer Relations
country: UK
role:
- author
google: +SamDutton
email: dutton@google.com
description: "Sam is a Developer Advocate"
(取自here)。
这种方法的问题在于,如果当前元素与条件不匹配,则会输出换行符,如https://developers.google.com/web/humans.txt中所示。
我该如何解决这个问题?
答案 0 :(得分:6)
Jekyll 2.0有一个where
过滤器。见docs。示例 - 来自doc:
{{ site.members | where:"graduation_year","2014" }}
{{ site.members | where_exp:"item", "item.graduation_year == 2014" }}
答案 1 :(得分:4)
如果您想要在条件不匹配时删除换行符,请尝试删除if
和for
子句中不需要的换行符:
{% for c in site.data["contributors"] %}{% assign contributor = c[1] %}{% if contributor.role contains "author" %}
{{contributor.name.given}} {{contributor.name.family}}{% endif %}{% endfor %}
在源代码中可能看起来不太好,但它可能会摆脱输出中的换行符。
注意:我没有试过这个,但类似的重新排列帮助我摆脱了不必要的新行。您甚至可能必须将{% if ...
放在最左侧,因此不会包含缩进。
答案 2 :(得分:0)
@Rudy Velthuis 答案 但是缩进了..(由于队列已满,无法编辑答案)
{% for c in site.data["contributors"] %}
{% assign contributor = c[1] %}
{% if contributor.role contains "author" %}
{{contributor.name.given}}
{{contributor.name.family}}
{% endif %}
{% endfor %}
我不知道为什么液体社区如此再次缩进..