如何从 for 循环创建数组?

How do I create an array from a forloop?

我有一个图像文件夹,我想在页面上呈现这些图像。我希望这些图片以 ordered/filtered 的方式呈现。为此,我知道图像首先需要放在一个数组中。

因此我从一个空数组开始:

{% assign my_array = "" %}

然后我遍历图像文件夹,并尝试以不同的方式将每个图像推入 my_array。示例:

{% for image in site.static_files %}
  {% if image.path contains "assets/images/target-folder" %}
     <!-- Push image into array -->
     {{ my_array | push: image }}
  {% endif %}
{% endfor %}

理想情况下,我可以按预期使用此数组:

{% for image in my_array | sort:"date" | reverse %}
  <!-- show image -->
{% endfor %}

我知道我可以用图像制作一个数据文件,但我想避免需要采取额外的步骤。感谢阅读。

您快完成了,您创建数组的方式是唯一需要解决的问题。

{% assign my_array = "" %} 创建一个空字符串。在 Liquid 中创建数组的一种简单方法是拆分以上内容:

{% assign my_array = "" | split: ',' %}

现在您可以按以下方式将项目推送到 for 循环内的数组中:

{% for image in site.static_files %}
  {% if image.path contains "assets/images/target-folder" %}
     <!-- Push image into array -->
     {% assign my_array = my_array | push: image %}
  {% endif %}
{% endfor %}

另请注意,您可以使用 where/where_exp filters:

无需循环
  {% assign my_array = site.static_files | 
      where_exp: "item", "item.path contains 'assets/images/target-folder'" %}

或:

  {% assign target_folder = "assets/images/target-folder" %}
  {% assign my_array = site.static_files | 
      where_exp: "item", "item.path contains target_foler" %}

(尽管与已接受的答案不同,这并不完全符合问题的 标题,但在所描述的示例中它仍然是一个有用的选项。)