Всегда используйте свойство длины
Существует библиотека или сценарий, добавляющий метод размера к прототипу массива так как это не собственный метод массива. Обычно это делается для добавления поддержки пользовательского геттера. Примером использования этого может быть, когда вы хотите получить размер в памяти массива (это единственное, о чем я могу подумать, это будет полезно для этого имени).
К сожалению, Underscore.js определяет метод size
, который фактически возвращает длину объекта или массива. Поскольку, к сожалению, свойство length функции определяется как число именованных аргументов, функция объявляет, что они должны использовать альтернативу, и был выбран размер (count был бы лучшим выбором).
это немного проще, я думаю, без использования фильтра слайса :
{% for post in site.posts | reverse | list[0:4] %}
<li>» <a href="/{{ post.url }}">{{ post.title }}</a></li>
{% endfor %}
другим способом является использование расширения элементов управления циклом :
{% for post in site.posts | reverse %}
{%- if loop.index > 4 %}{% break %}{% endif %}
<li>» <a href="/{{ post.url }}">{{ post.title }}</a></li>
{%- endfor %}
@ У Андрея правильный ответ. Однако, чтобы полностью решить ваш вопрос:
{% for recent in site.posts|batch(5)|list|last|reverse %}
<li> <a href="/{{ recent.url }}">{{ recent.title }}</a></li>
{% endfor %}
В качестве альтернативы:
{% for recent in site.posts|reverse|batch(5)|first %}
<li> <a href="/{{ recent.url }}">{{ recent.title }}</a></li>
{% endfor %}
Какой из них вы используете, зависит от ваших предпочтений.
Я придумал следующий код:
{% for x in xs | batch(n) | first %}
...
{% endfor %}
Фильтр batch(n)
разбивает список xs
на подсписки длиной n
, затем фильтр first
выбирает первый из этих подсписки.