Если вы попробуете это, вы поймете, что происходит.
{% capture alltags %}
{% for story in site.stories %}
{{ story.tags | join: ' ' }}
{% endfor %}
{% endcapture %}
alltags : {{ alltags | inspect }}
{% for word in alltags %}
word : {{ word | inspect }}
uniq : {{ word | uniq }}
{% endfor %}
alltags
- это строка, а не массив.
Когда вы зацикливаетесь на alltags
, единственный происходящий цикл содержит переменную word
, которая является строкой, равной самой alltags
.
Фактически вам нужно применить фильтр uniq
к массиву.
Если вы запустите этот код, вы увидите разницу:
{% comment %} create an empty array {% endcomment %}
{% assign tagsArray = "" | split:"" %}
{% for story in site.stories %}
{% assign tagsArray = tagsArray | concat: story.tags %}
tagsArray : {{ tagsArray | inspect }}
{% endfor %}
tagsArray : {{ tagsArray | inspect }}
{% assign tagsArray = tagsArray | uniq %}
tagsArray uniq : {{ tagsArray | inspect }}