如何按 jekyll 数据 yaml 文件中的键值对输出的维数组进行排序?

How can I sort a dimensional array output by key value from jekyll data yaml files?

我需要几个 yml 文件中的名称在输出中按字母顺序排序。

我试图在我的 for 循环中添加 | sort: 'name'。我得到:

 Liquid Exception: no implicit conversion of String into Integer in pages/index.html

样本_data/cat/example1.yml

name: "test1"

permalink: "/test"

twitter: "WIP"

facebook: "WIP"

web: "WIP"

我在 /cat 文件夹中的测试中至少有 3 个 yml 文件。

示例包含文件

<div class="row">
{% for cat_hash in site.data.cat %}
{% assign cat = cat_hash[1] | sort: 'name' %}
<div class="col-6 col-12-narrower">
    <section>
      <header>
        <a class="image featured" href="{{ cat.permalink }}" title="{{ cat.name }}"><h3>{{ cat.name }}</h3></a>
      </header>
        <p>{{ cat.web }}</p>
     </section>
</div>
{% endfor %}
</div>

我已经阅读了几个关于此类问题的示例。只是不确定循环中的任何哈希结果是否回答了我的情况?

您没有对有效的哈希数组应用排序。

如果您执行 {{ site.data.cat | inspect }},您会得到类似 {"t1"=>{"name"=>"test1"}, "t2"=>{"name"=>"allo"}, "t3"=>{"name"=>"jekyll"}} 的结果(为简洁起见,我简化了数据文件,但对于像您这样的更复杂的数据文件,它的工作原理相同)。

您当前正在对无法自行排序的 {"name"=>"test1"} 对象应用排序过滤器。

您需要做的是将所有数据散列到一个数组中。然后你就可以排序了。

{% assign datas = "" | split: "" %}
{% for cat in site.data.cat %}
  {% assign datas = datas | push: cat[1] %}
{% endfor %}

DEBUG : {{ datas | inspect }}

您现在有了一个可以排序的数组。

{% assign datas = datas | sort: "name" %}
DEBUG : {{ datas | inspect }}

您现在可以打印按名称排序的数据。

完整代码:

{% assign datas = "" | split: "" %}
{% for cat in site.data.cat %}
  {% assign datas = datas | push: cat[1] %}
{% endfor %}

{% assign datas = datas | sort: "name" %}

<div class="row">
{% for cat in datas %}
  <div class="col-6 col-12-narrower">
    <section>
      <header>
        <a class="image featured" href="{{ cat.permalink }}" title="{{ cat.name }}">
          <h3>{{ cat.name }}</h3>
        </a>
      </header>
      <p>{{ cat.web }}</p>
    </section>
  </div>
{% endfor %} 
</div>

请注意 inspect 过滤器仅用于调试。