有没有办法在 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 %}