Liquid开发:如何从对象中排除指定属性或修改指定属性值
方案1:过滤排除指定属性
原生Liquid没有直接删除对象属性的内置方法,你可以通过遍历属性键的方式构建不含指定属性的新对象:
{% comment %} 替换为你自己的原始Liquid对象 {% endcomment %} {% assign original_obj = your_object %} {% comment %} 要排除的属性列表,多个用英文逗号分隔 {% endcomment %} {% assign excluded_attrs = "description" | split: "," %} {% comment %} 初始化空对象 {% endcomment %} {% assign filtered_obj = "" | parse_json: "{}" %} {% for attr in original_obj.keys %} {% unless excluded_attrs contains attr %} {% assign filtered_obj = filtered_obj | add_field: attr, original_obj[attr] %} {% endunless %} {% endfor %}
如果你的运行环境不支持add_field过滤器,可以先将对象转成JSON字符串,删除对应属性后再转回对象使用
方案2:复制对象并清空description值
这个方案兼容性最高,适合不需要彻底删除属性、只需要清空指定属性值的场景:
{% comment %} 复制原始对象 {% endcomment %} {% assign new_obj = original_obj | clone %} {% comment %} 清空description属性 {% endcomment %} {% assign new_obj.description = "" %}
如果环境不支持clone过滤器,可以用遍历的方式复制对象:
{% assign new_obj = "" | parse_json: "{}" %} {% for attr in original_obj.keys %} {% assign new_obj = new_obj | add_field: attr, original_obj[attr] %} {% endfor %} {% assign new_obj.description = "" %}
- 如果你需要同时修改多个属性的值,只需要在赋值环节增加对应属性的赋值语句即可
- Shopify等限制对象操作的Liquid环境优先选用该方案,避免属性删除操作不生效的问题
内容的提问来源于stack exchange,提问作者mfcss
相关产品推荐
相关产品推荐

