有没有办法在 Liquid 中删除多维数组中的重复项
Is there a way to remove duplicates in a multi dimensional array in Liquid
我知道您可以在液体中使用 uniq
过滤器,但这似乎会使阵列变平,这不是我想要的。
这是我的数组示例:
[
["Brazil", "/assets/images/flags/brazil.png"],
["Brazil", "/assets/images/flags/brazil.png"],
["Argentina", "/assets/images/flags/argentina.png"]
]
如果我使用 uniq
过滤器重新分配数组,如下所示,我会得到以下结果:
{% assign countries = countries | uniq %}
数组变为:
["Brazil", "/assets/images/flags/brazil.png", "Brazil", "/assets/images/flags/brazil.png", "Argentina", "/assets/images/flags/argentina.png"]
如何删除重复项并保留数组的当前结构?
我最终用以下液体解决了这个问题:
{% assign contacts = include.contacts %}
{% assign countries = '' | split: '' %}
{% for item in contacts %}
{% assign array_item = '' | split: '' %}
{% assign array_item = array_item | push: item.country %}
{% assign array_item = array_item | push: item.country_flag_image %}
{% unless countries contains array_item %}
{% assign countries = countries | push: array_item %}
{% endunless %}
{% endfor %}
对于 for
循环中的每次迭代,我创建一个新的数组对象,其中包含国家和标志图像作为数组项。在将这个新数组添加到国家/地区数组之前,我使用 unless
语句检查它是否已经存在。如果它不存在,它将被添加到国家数组中。
如果有更好的解决办法请告诉我
另一个解决方案:如果您的数组有标签,请使用“分组依据”:
{% assign alldocs = site.documents %}
{% assign alldocsbytitle = alldocs | group_by: 'title' %}
{% assign alldocswithoutduplicates = '' | split: '' %}
{% for docs in alldocsbytitle %}
{% assign alldocswithoutduplicates = alldocswithoutduplicates | push: docs.items[0] %}
{% endfor %}
我知道您可以在液体中使用 uniq
过滤器,但这似乎会使阵列变平,这不是我想要的。
这是我的数组示例:
[
["Brazil", "/assets/images/flags/brazil.png"],
["Brazil", "/assets/images/flags/brazil.png"],
["Argentina", "/assets/images/flags/argentina.png"]
]
如果我使用 uniq
过滤器重新分配数组,如下所示,我会得到以下结果:
{% assign countries = countries | uniq %}
数组变为:
["Brazil", "/assets/images/flags/brazil.png", "Brazil", "/assets/images/flags/brazil.png", "Argentina", "/assets/images/flags/argentina.png"]
如何删除重复项并保留数组的当前结构?
我最终用以下液体解决了这个问题:
{% assign contacts = include.contacts %}
{% assign countries = '' | split: '' %}
{% for item in contacts %}
{% assign array_item = '' | split: '' %}
{% assign array_item = array_item | push: item.country %}
{% assign array_item = array_item | push: item.country_flag_image %}
{% unless countries contains array_item %}
{% assign countries = countries | push: array_item %}
{% endunless %}
{% endfor %}
对于 for
循环中的每次迭代,我创建一个新的数组对象,其中包含国家和标志图像作为数组项。在将这个新数组添加到国家/地区数组之前,我使用 unless
语句检查它是否已经存在。如果它不存在,它将被添加到国家数组中。
如果有更好的解决办法请告诉我
另一个解决方案:如果您的数组有标签,请使用“分组依据”:
{% assign alldocs = site.documents %}
{% assign alldocsbytitle = alldocs | group_by: 'title' %}
{% assign alldocswithoutduplicates = '' | split: '' %}
{% for docs in alldocsbytitle %}
{% assign alldocswithoutduplicates = alldocswithoutduplicates | push: docs.items[0] %}
{% endfor %}