Uniq тег жидкого фильтра не будет работать при зацикливании слов в строке - PullRequest
0 голосов
/ 13 марта 2019

Я хочу перечислить все теги из моих сообщений, и, конечно, только по одному из каждого тега, чтобы не было нескольких из одного тега.

Я попытался поместить его в строку, разделив их пробелом, а затем зачеркнуть каждое слово из строки, дав им фильтр uniq:

{% capture alltags %}

{% for story in site.stories %}

{{ story.tags | join: ' ' }}

{% endfor %}

{% endcapture %}

{% for word in alltags %}

{{ word | uniq }}

{% endfor %}

Я получаю пробелы между словами, но они не уникальны. Мне нужно, чтобы они были зациклены по отдельности, чтобы я мог сделать ссылку на них.

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Если вы попробуете это, вы поймете, что происходит.

{% 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 }}
1 голос
/ 13 марта 2019

Примерно так будет работать.

{% comment %} compiling the gross list of all tags, duplicates and all {% endcomment %}
{% for post in site.posts %}
  {% assign tags = tags | concat:post.tags %}
{% endfor %}
{% comment %} Getting rid of duplicates (uniq), sorting it  - all in one go {% endcomment %}
{{ tags | uniq | sort }}
...