2012-02-08 39 views
10

Tôi đang cố gắng chọn một phần tử ngẫu nhiên từ một mảng - điều này có thể sử dụng Liquid/Jekyll không?Chất lỏng: Tôi có thể lấy một phần tử ngẫu nhiên từ một mảng không?

Tôi có thể tạo mảng - và truy cập chỉ mục đã cho ... nhưng có cách nào để "xáo trộn" mảng và sau đó chọn chỉ mục và do đó lấy phần tử ngẫu nhiên từ mảng không?

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

{{ page.prefix[1] }} 

# outputs "Bar" 
+0

Câu hỏi này hiện có câu trả lời ở đây: https://stackoverflow.com/a/28323813/2838033 - thêm trường hợp này trong trường hợp ai đó đến từ Google. – mechalynx

Trả lời

9

Chất lỏng không có bộ lọc để chọn phần tử ngẫu nhiên từ mảng hoặc khoảng nguyên.

Nếu bạn muốn Jekyll làm điều đó, bạn sẽ phải tạo phần mở rộng để thêm bộ lọc chất lỏng đó.

Tuy nhiên, tôi phải chỉ ra rằng làm như vậy sẽ chọn một phần tử ngẫu nhiên mỗi khi trang được tạo, nhưng không phải mỗi khi trang được xem.

Nếu bạn muốn nhận các giá trị ngẫu nhiên khác nhau mỗi khi bạn truy cập trang, lựa chọn tốt nhất của bạn là sử dụng javascript và cho phép khách hàng chọn một giá trị ngẫu nhiên. Bạn có thể sử dụng chất lỏng để tạo ra các javascript có liên quan mặc dù.

2

Bạn có thể tạo một plugin để có được một yếu tố ngẫu nhiên. Một cái gì đó như thế này:

module Jekyll 
    module RandomFilter 
    # Use sample to get a random value from an array 
    # 
    # input - The Array to sample. 
    # 
    # Examples 
    # 
    # random([1, 2, 3, 4, 5]) 
    # # => ([2]) 
    # 
    # Returns a randomly-selected item out of an array. 
    def random(input) 
     input.sample(1) 
    end 
    end 
end 

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

Sau đó làm một cái gì đó như thế này trong mẫu của bạn để thực hiện:

{% assign myArray = '1|2|3|4|5 | split: '|' %} 
{% assign myNumber = myArray | random %} 
+0

Tôi làm cách nào để thực hiện điều này ** trong Shopify **? – ADTC

+0

@ADTC Không biết! – Brendan

+0

Tôi nghĩ đó là câu trả lời của user2517028 – ADTC

1

Bạn có thể làm điều đó chỉ trong chất lỏng, nhưng nó có thể ít hơn của giải pháp chung chung như một trong những được cung cấp bởi @Brendan. Theo số this article, bạn có thể tạo một số chất lỏng ngẫu nhiên giữa tối thiểu & tối đa. Vì vậy, chỉ cần:

  • Gán min đến 0 và tối đa chiều dài mảng của bạn.
  • Lặp qua mảng cho đến khi bạn tìm thấy số ngẫu nhiên và chọn phần tử của bạn.

Dưới đây là một ví dụ, có chỉ số mảng ngẫu nhiên của bạn:

{% assign min = 0 %} 
{% assign max = prefix.size %} 
{% assign diff = max | minus: min %} 
{% assign randomNumber = "now" | date: "%N" | modulo: diff | plus: min %} 

Sau đó tìm giá trị ngẫu nhiên của bạn:

{{ prefix[randomNumber] }} 
0

Câu trả lời 2018 là

{% assign prefix = page.prefix | sample: 2 %} 
{{ prefix[0] }} 

Như OP hỏi về Jekyll, điều này có thể được tìm thấy tại: https://jekyllrb.com/docs/templates/

+0

Hiển thị tài liệu. Tôi không tìm thấy nó trong tài liệu tham khảo Liquid. – ADTC

+0

Đã cập nhật. Thông báo, Jekyll cụ thể, phù hợp với OP. – Merovex

Các vấn đề liên quan