You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jekyll/Liquid中无需循环查找数组元素位置的方法

在Jekyll/Liquid中不使用循环查找数组元素位置

嘿,好问题!确实,Liquid(Jekyll默认的模板语言)并没有像Java那样原生自带indexOf()方法来直接返回数组元素的索引,但咱可以用它的内置过滤器组合出完全符合你要求的效果——不用写任何循环和循环内的条件判断。

核心实现思路

利用Liquid的join、split和size过滤器,通过字符串分割的方式间接计算元素位置,具体步骤和示例如下:

示例代码

假设我们有一个普通数组,想要查找某个元素的位置:

{% assign fruits = "apple,banana,cherry,dates" | split: "," %}
{% assign target_element = "cherry" %}

{% comment %} 可选:先检查元素是否存在,避免不存在时返回误导性结果 {% endcomment %}
{% if fruits contains target_element %}
  {% assign separator = "|||" %} {% comment %} 选一个不会出现在元素里的特殊分隔符 {% endcomment %}
  {% assign joined_str = fruits | join: separator %}
  {% assign split_part = joined_str | split: target_element | first %}
  {% assign element_index = split_part | split: separator | size %}
  
  目标元素 "{{ target_element }}" 的位置是: {{ element_index }} {% comment %} 输出2,Liquid数组索引从0开始 {% endcomment %}
{% else %}
  目标元素 "{{ target_element }}" 不在数组中
{% endif %}

逻辑拆解

  1. join: separator:把数组元素用自定义的特殊分隔符拼接成字符串,比如将["apple", "banana", "cherry"]转为apple|||banana|||cherry
  2. split: target_element:用目标元素分割拼接后的字符串,取分割结果的第一个部分——这部分就是目标元素之前的所有内容
  3. split: separator:把前半部分内容再用同样的分隔符拆分,得到目标元素之前的所有元素组成的数组
  4. size:取这个数组的长度,就是目标元素在原数组中的索引(因为索引从0开始,长度刚好等于索引值)

注意事项

  • 必须选择一个绝对不会出现在数组元素中的分隔符,比如|||、###这类特殊组合,避免因为元素本身包含分隔符导致分割出错
  • 如果不需要检查元素是否存在,直接执行核心计算逻辑即可,但此时若元素不存在,会返回原数组的长度,需根据场景判断是否需要提前用contains做检查

内容的提问来源于stack exchange,提问作者javito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:36:24