Shopify-Liquid中if语句未按预期工作的原因排查
问题分析与修复
你的代码存在两个核心错误,导致筛选逻辑完全偏离预期:
1. 错误的数组访问与循环嵌套
原代码中header[-1]是取每个子数组的最后一个元素(比如第一个子数组的"0.0"),随后for charge in header[-1]是在遍历这个字符串的单个字符,而非你预期的子数组元素。此时charge[2]是访问单个字符的索引(比如字符"0"没有索引2,返回nil),和0比较的逻辑完全失效。
2. 字符串与数字的类型不匹配
就算拿到了目标元素,直接用字符串(如"0.0"、"8.8")和数字0比较,Liquid的自动类型转换可能出现异常,导致判断结果不准确。
修复后的代码
{% assign array_of_arrays = [["0.0","5.0","0.0"],["0.0","6.6","8.8"],["0.0","9.9","1.1"]] %} {%- for sub_array in array_of_arrays -%} {% assign third_value = sub_array[2] | plus: 0 %} {% if third_value > 0 %} "this is it!!" {% endif%} {%- endfor -%}
修复点说明:
- 移除多余的第二层循环,直接遍历每个子数组
sub_array - 用
sub_array[2]直接获取子数组的第三个元素(Liquid数组索引从0开始) - 通过
| plus: 0过滤器将字符串转为数字,确保数值比较的准确性
修改后即可正确筛选出第三个元素大于0的子数组,仅输出后两个子数组对应的结果。
内容的提问来源于stack exchange,提问作者astroluv
相关产品推荐
相关产品推荐

