How do I shuffle the order of an array in Jekyll?

jekyll, liquid, ruby

Solution

I managed to achieve this by adding a custom filter via Jekyll's plugin system:

# _plugins/shuffle.rb
module Jekyll
  module ShuffleFilter
    def shuffle(array)
      array.shuffle
    end
  end
end

Liquid::Template.register_filter(Jekyll::ShuffleFilter)

And using:

{% assign shuffled_array = page.array | shuffle %}
{% for i in shuffled_array %}
  <p>{{ i }}</p>
{% endfor %}

Problem

Specifically I'm looking to list an array's contents in random order on a page each time it is generated. So, given `page.array = [1, 2, 3]` the following: ``` {% for i in page.array %} <p>{{ i }}</p> {% endfor %} <!-- Yields: <p>1</p> <p>2</p> <p>3</p> --> ``` How do I randomize that order? (hopefully with syntax somewhat like the following) ``` {% for i in page.array.shuffle %} <p>{{ i }}</p> {% endfor %} <!-- Yielding something like this, or a random reordering: <p>3</p> <p>1</p> <p>2</p> --> ```

Original source

Related problems