Liquid使用where过滤器筛选对象数组结果不符合预期如何解决
问题根因
你对where过滤器的单参数用法存在误解:
- 仅传入属性名单个参数时,Liquid的
where过滤器只会过滤掉指定属性为nil的元素,不会自动判断属性的布尔值是否为真。 - 你的测试数据里apple的
good字段值是false,false不属于nil,因此不会被过滤,最终两个水果条目都被返回了。
修复方案
给where过滤器传入第二个匹配参数,明确指定要匹配的值为true,修改模板代码如下:
template = ' {% assign good_fruits = fruits | where: "good", true %} {{ good_fruits }}'
修改后重新运行,就只会返回good属性严格等于true的orange条目,和你的预期输出一致。
补充:如果需要筛选布尔值为假的元素,给第二个参数传
false即可;单参数调用where仅适合用来判断字段是否存在,不能直接用来做布尔真值筛选。
内容的提问来源于stack exchange,提问作者jozo
相关产品推荐
相关产品推荐

