Skip to main content

TIL: How to shuffle an array in a Jekyll template

If you want an array in random order, you can use the sample filter to get a random sample of the same size as the original array.

As part of the site rebuild, I wanted a way to shuffle a list of selected articles at build time. This order will get “baked in” to the rendered output, but it still introduces an element of randomness and I rebuild the site once a day anyway.

It turns out there’s no way to do this in vanilla Liquid, but Jekyll has a sample filter that can pick one or more random values from an array:

{% assign fruits = "apple,banana,cherry,damson" | split: "," %}
{% assign fruits = fruits | sample: fruits.size %}

{% for f in fruits %}
  {{ f }}
{% endfor %}

If you look at the implementation, this is just a thin wrapper about Array.sample, and it has similar behaviour – e.g. no duplicates, never returns more than the original array.