Agrupamento com group

Durante a implementação de um template padrão para o Storefront foi identificada a necessidade de otimizar a construção de alguns componentes. Uma abordagem identificada foi a implementação de uma função de agrupamento.

O Storefront tem implementado um recurso de agrupamento de objetos, semelhante a um hashmap, ou um dicionário do javascript. O grupo é composto essencialmente de uma chave e uma lista correspondente de objetos.
O agrupamento atualmente funciona com valores de texto e numéricos, permitindo também valores nulos para a chave.

Funcionamento

Quando quiser agrupar objetos por campos específicos, chame a função group.by passando um array de objetos, e defina qual o campo dos objetos será utilizado para criar as chaves (e assim os grupos).

Quando quiser acessar os grupos criados a partir da chave de agrupamento, chame a função group.get

Exemplo de objeto:

{
    "lista": [
        {
            "produtoId": 10,
            "categoria": "Relógios"
        },
        {
            "produtoId": 11,
            "categoria": "Acessórios"
        },
        {
            "produtoId": 40,
            "categoria": "Blusas"
        },
        {
            "produtoId": 41,
            "categoria": "Tênis"
        },
        {
            "produtoId": 42,
            "categoria": "Blusas"
        },
        {
            "produtoId": 45,
            "categoria": "Relógios"
        }
    ]
}

Para realizar o agrupamento, podemos usar a seguinte sintaxe:

{{ grupos = lista | group.by @(do; ret $0.categoria; end) }}

Para acessar a lista de objetos agrupados por um campo, use a seguinte sintaxe

{{ relogios = grupos | group.get "Relógios" }}