Liquid:我可以从数组中获取随机元素吗?

rst*_*rim 13 liquid jekyll

我正在尝试从数组中选择一个随机元素 - 这可能使用Liquid/Jekyll吗?

我可以创建一个数组 - 并访问一个给定的索引...但有没有办法"混乱"数组然后选择一个索引,从而从数组中获取一个随机元素?

prefix: ["Foo", "Bar", "Baz"]
---

{{ page.prefix[1] }}

# outputs "Bar"
Run Code Online (Sandbox Code Playgroud)

Mer*_*vex 12

2018年的答案是

{% assign prefix = page.prefix | sample: 2 %}
{{ prefix[0] }}
Run Code Online (Sandbox Code Playgroud)

当 OP 询问 Jekyll 时,可以在以下位置找到:https : //jekyllrb.com/docs/templates/


kik*_*ito 11

Liquid没有用于从数组或整数间隔中拾取随机元素的过滤器.

如果你想要Jekyll这样做,你必须创建一个扩展来添加液体过滤器.

但是,我必须指出,这样做会在每次生成页面时选择一个随机元素,但不是每次查看页面时都是如此.

如果您希望每次访问页面时获得不同的随机值,您最好的选择是使用javascript并让客户端选择随机值.您可以使用液体生成相关的JavaScript.


use*_*028 5

您也许可以在 Liquid 中做到这一点,但它可能不像@Brendan 提供的那样通用解决方案。根据这篇文章,您可以生成一个介于最小值和最大值之间的随机液体数。简单地说:

  • 将最小值指定为 0,将最大值指定为数组的长度。
  • 循环数组,直到找到随机数并选择元素。

这是一个示例,获取随机数组索引:

{% assign min = 0 %}
{% assign max = prefix.size %}
{% assign diff = max | minus: min %}
{% assign randomNumber = "now" | date: "%N" | modulo: diff | plus: min %}
Run Code Online (Sandbox Code Playgroud)

然后找到你的随机值:

{{ prefix[randomNumber] }}
Run Code Online (Sandbox Code Playgroud)