如何从for循环中创建一个数组?

11

我有一个图片文件夹,想在页面上呈现其中的图片。我希望按照一定方式对这些图片进行排序或筛选。为了达到这个目的,我知道首先需要将这些图片放在一个数组中。

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

{% 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 %}

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

3个回答

26

你已经快要完成了,唯一需要修复的是你创建数组的方式。

这个 {% 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 %}

2
非常好,谢谢。我已经使用您的修复程序对此数组进行了排序,然后循环遍历它。像这样:{% assign sorted_my_array = my_array | reverse %} - Danny
这个功能完美地运作,但是在Jekyll和Liquid的文档中都没有列出此函数。 - Edward
@user3411192 请查看此链接:https://help.shopify.com/zh-CN/themes/liquid/filters/string-filters#split - marcanuy
1
让我澄清一下:在Jekyll或Shopify文档中都找不到push函数。它确实能够完成它应该做的事情,但它是一个秘密函数。 - Edward
在这里!谢谢澄清。这解释了为什么我在Shopify文档中没有看到它,因为它只适用于Jekyll。 - Edward
显示剩余2条评论

4

同时请注意,您可以使用where/where_exp过滤器来实现此操作,无需使用循环

  {% 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" %}

(虽然和问题的标题不完全对应,但在所描述的示例中仍然是一个有用的选项。)


0
这个方法对我有效:
{% assign namesArr = '' %}
{% for animal in animals %}
    {% assign namesArr = namesArr | append: animal.name %}
    {% if forloop.last == false %}
       {% assign namesArr = namesArr | append: "," %}
    {% endif %}
{% endfor %}

{% assign namesArr = namesArr | split: "," %}

现在namesArr是一个数组,我们可以检查数组是否包含某个值:https://dev59.com/8l0Z5IYBdhLWcg3w_0h8#30823063


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接