首页 > 解决方案 > 如何在 Lquid 或 Javascript 中循环遍历 YAML 集合和 110 中的子集合?

问题描述

如何获取带有嵌套列表的 YAML 列表并输出嵌套项?

---
- fruit
  - banana
  - apple
  - orange
- vegetable
  - lettuce
  - broccoli
  - carrots
- bread
- cheese
- meat
  - beef
  - turkey
  - chicken

然后

<h1>Groceries</h1>
{% for item in groceries %}
{% comment %}
1. capture item
2. test for nested list
3. render nested items
{% endcomment %}
{{ item }}
{% endfor %}

Liquid 是否有过滤器来检查和遍历嵌套列表?

我应该创建一个带有回调的自定义 Javascript 过滤器吗?

标签: yamlliquideleventy

解决方案


好的,我想添加另一个答案。我可能会删除我的第一个,但现在想离开它。因此,我认为这与您的原始问题更接近一些:

---
layout: main
groceries:
    - fruit
        - banana
        - apple
        - orange
    - vegetable
        - lettuce
        - broccoli
        - carrots
    - bread
    - cheese
    - meat
        - beef
        - turkey
        - chicken
---

然后我这样做了:

{% for type in groceries %}
    {% assign items = type | split: " - " %}
    {% assign header = items[0] %}
    <h2>{{ header }}</h2>
    {% if items.length > 1 %}
        <ul>
        {% for item in items %}
            {% unless forloop.first %}
            <li>{{item}}</li>
            {% endunless %}
        {% endfor %}
        </ul>
    {% endif %}
    <p>
{% endfor %}

在循环中,items是一个包含顶级项任何子项的数组。所以第一项总是主要的东西(水果、蔬菜、肉)。如果我们有 2 个或更多项目,则意味着我们有一个“子列表”,您可以看到我如何遍历它们并跳过第一个项目。

想法?


推荐阅读