在 Jekyll 中计算集合标签

Jas*_*ler 2 liquid jekyll

我正在尝试计算并列出_noteJekyll 中调用的集合中的标签。我认为,我非常接近解决它,但我对标签的实际计数感到有些困惑(列出唯一标签工作正常)并且可以使用第二双眼睛来查看液体标记看看我错过了什么。

_noteYAML 标头中的标签组织如下:

tags: [tag1, tag2, tag3, tag4]

迄今:

<!-- Create empty arrays -->
{% assign tags = '' | split: ',' %}
{% assign unique_tags = '' | split: ',' %}
{% assign counter = 0 %}

<!-- Map and flatten -->
{% assign note_tags =  site.note | map: 'tags' | join: ','  | split: ',' %}

<!-- Push to tags -->
{% for tag in note_tags '%}
  {% assign tags = tags | push: tag %}
{% endfor %}

<!-- Uniq -->
{% assign tags = tags | sort %}
{% for tag in tags %}
  <!-- If not equal to previous then it must be unique -->
  {% unless tag == previous %}    
    <!-- Push to unique_tags and count -->
    {% assign unique_tags = unique_tags | push: tag %}
    {% assign counter = counter | plus: 1 %}
  {% endunless %}
  {% assign previous = tag %}
{% endfor %}

{% for tag in unique_tags %}
  {{ tag }} ({{ counter }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

size在液体中使用该方法似乎没有返回正确的值。

Dav*_*uel 5

新答案

{% comment %}map, flatten and sort{% endcomment %}
{% assign tags =  site.note | map: 'tags' | join: ','  | split: ',' | sort %}
{% assign previousTag = "" %}
{% assign counter = 0 %}

{% for currentTag in tags %}

  {% comment %}first loop : initializing previousTag{% endcomment %}
  {% if previousTag == "" %}
    {% assign previousTag = currentTag %}
  {% endif %}

  {% if currentTag == previousTag %}
    {% assign counter = counter | plus: 1 %}
  {% else %}
    {{ previousTag }} ({{ counter }})
    {% assign counter = 1 %}
  {% endif %}

  {% comment %}last loop : flushing what's left to print{% endcomment %}
  {% if forloop.last %}
    {{ currentTag }} ({{ counter }})
  {% endif %}

  {% assign previousTag = currentTag %}

{% endfor %}
Run Code Online (Sandbox Code Playgroud)

旧答案(我是否错过了问题中的某些内容:是的!)

液体 uniq 过滤器来救援!

{% assign uniq_tags = site.note
                      | map: 'tags'
                      | join: ","
                      | split: ","
                      | uniq %}

<p>{{ uniq_tags | array_to_sentence_string }}</p>
Run Code Online (Sandbox Code Playgroud)