Como Usar a Função sort() do Notion com Função de Comparação Personalizada
🔍 WiseChecker

Como Usar a Função sort() do Notion com Função de Comparação Personalizada

As fórmulas do Notion podem ordenar arrays usando a função sort() nativa, mas o comportamento padrão pode não atender às suas necessidades. Por padrão, sort() organiza números em ordem crescente e texto em ordem alfabética. Quando você precisa de uma ordem diferente, como ordenar por valor de propriedade, data ou prioridade personalizada, é necessário fornecer uma função de comparação personalizada. Este artigo explica como o comparador funciona, mostra exemplos passo a passo para ordenar por números, texto e datas, e aborda armadilhas comuns a evitar.

Principais Conclusões: Usando sort() com um Comparador Personalizado no Notion

  • sort(lista, comparador): O segundo argumento é uma função que retorna um número negativo, zero ou positivo para determinar a ordem.
  • Assinatura da função comparadora: compare(a, b) onde a e b são elementos do array. Retorne negativo para colocar a antes de b, positivo para o inverso, ou zero para manter a ordem original.
  • Ordenar por propriedade: Use a.nomePropriedade e b.nomePropriedade dentro do comparador para ordenar objetos por um campo específico.

ADVERTISEMENT

Como o Comparador Personalizado da Função sort() Funciona nas Fórmulas do Notion

A função sort() no Notion aceita um array e uma função comparadora opcional. Quando você omite o comparador, o Notion usa a ordem crescente padrão: números do menor para o maior, texto em ordem alfabética e datas em ordem cronológica. A função comparadora substitui esse comportamento padrão.

A função comparadora recebe dois argumentos, convencionalmente chamados de a e b, que representam dois elementos do array. Ela deve retornar um número:

  • Número negativo (ex.: -1): a deve vir antes de b
  • Zero (0): a ordem de a e b permanece inalterada em relação um ao outro
  • Número positivo (ex.: 1): b deve vir antes de a

Por exemplo, para ordenar números em ordem decrescente, você subtrai b de a: sort([1, 3, 2], a - b) retorna [3, 2, 1]. A função comparadora também pode acessar propriedades de objetos, como a.Nome ou b.Data de Vencimento, para ordenar por esses campos. Isso é essencial quando seu array contém valores de rollup, mapas ou resultados de fórmulas estruturados como objetos.

Passos para Aplicar um Comparador Personalizado com sort()

Os passos a seguir mostram como construir uma fórmula que ordena um array de objetos por uma propriedade numérica, depois por texto e, finalmente, por data. Todos os exemplos assumem que você tem um banco de dados com um rollup que retorna um array de itens relacionados, ou que você cria um array manualmente usando map() e filter().

Ordenar um Array de Números em Ordem Decrescente

  1. Crie ou identifique o array
    Suponha que você tenha uma propriedade de rollup chamada Pontuações que retorna uma lista de números como [4, 9, 2, 7]. Você deseja ordenar do maior para o menor.
  2. Escreva a fórmula com um comparador
    No editor de propriedades de fórmula, insira: sort(prop("Pontuações"), a - b). A expressão a - b retorna um número negativo quando a é maior que b, colocando valores maiores primeiro.
  3. Verifique o resultado
    A fórmula retorna [9, 7, 4, 2]. Se você vir um erro, certifique-se de que a propriedade é um rollup de números e não uma string de texto.

Ordenar um Array de Objetos por uma Propriedade Numérica

  1. Entenda a estrutura do array
    Se você tem um rollup que retorna um array de páginas, cada página pode conter um número de Prioridade (1, 2, 3). Os elementos do array são objetos com uma propriedade Prioridade.
  2. Escreva o comparador usando acesso a propriedades
    Use: sort(prop("Tarefas Relacionadas"), a.Prioridade - b.Prioridade). Isso ordena as tarefas por prioridade em ordem crescente (1 primeiro).
  3. Ordenar em ordem decrescente por prioridade
    Inverta a subtração: sort(prop("Tarefas Relacionadas"), b.Prioridade - a.Prioridade) coloca números de prioridade mais alta primeiro.

Ordenar um Array de Objetos por uma Propriedade de Texto em Ordem Alfabética

  1. Prepare o comparador para texto
    O Notion não possui um operador de comparação de strings nativo. Use a função if() para retornar -1, 0 ou 1 com base na ordem alfabética. Para ordem crescente (A a Z): sort(prop("Itens"), if(a.Nome < b.Nome, -1, if(a.Nome > b.Nome, 1, 0))).
  2. Aplique a fórmula
    Substitua Itens pelo nome da sua propriedade de rollup e Nome pela propriedade de texto pela qual deseja ordenar. O comparador compara os valores de texto usando os operadores menor que e maior que.
  3. Inverta a ordem para decrescente (Z a A)
    Troque os valores -1 e 1: sort(prop("Itens"), if(a.Nome > b.Nome, -1, if(a.Nome < b.Nome, 1, 0))).

Ordenar um Array de Objetos por uma Propriedade de Data

  1. Entenda a comparação de datas
    Datas em fórmulas do Notion podem ser comparadas diretamente usando o operador de subtração, pois as datas são armazenadas como timestamps. Subtrair uma data de outra retorna a diferença em milissegundos.
  2. Ordenar por data de vencimento crescente (mais antiga primeiro)
    Use: sort(prop("Tarefas"), a.Data de Vencimento - b.Data de Vencimento). Isso coloca a data de vencimento mais antiga no topo do array ordenado.
  3. Ordenar por data de vencimento decrescente (mais recente primeiro)
    Inverta a subtração: sort(prop("Tarefas"), b.Data de Vencimento - a.Data de Vencimento).

ADVERTISEMENT

Erros Comuns e Limitações ao Usar sort() com um Comparador

Comparador Retorna um Booleano em Vez de um Número

Um erro comum é escrever sort(lista, a > b) que retorna true ou false. O Notion converte booleano para 0 ou 1, causando uma ordenação instável. Sempre retorne um número negativo, zero ou positivo. Use if(a > b, 1, if(a < b, -1, 0)) para texto, ou a - b para números.

O Array Contém Tipos de Dados Mistos

Se seu array mistura números e texto, o comparador pode produzir resultados inesperados ou um erro. Certifique-se de que todos os elementos do array são do mesmo tipo antes de ordenar. Use filter() para remover tipos incompatíveis, ou converta-os usando toNumber() ou format().

Nomes de Propriedades com Espaços ou Caracteres Especiais

Ao acessar uma propriedade que contém um espaço, use a notação de colchetes: a["Data de Vencimento"] em vez de a.Data de Vencimento. O analisador de fórmulas do Notion trata um espaço como erro de sintaxe. Se o nome da propriedade tiver caracteres especiais, a notação de colchetes é obrigatória.

Comparador Não Lida com Valores Nulos ou Vazios

Se uma propriedade estiver vazia ou indefinida, o comparador pode retornar NaN ou fazer com que a ordenação falhe. Adicione uma verificação no início do comparador: if(empty(a.Propriedade), 1, if(empty(b.Propriedade), -1, ...)). Isso empurra valores vazios para o final.

Item sort() padrão sort() com comparador personalizado
Ordem de classificação Apenas crescente (números, texto, datas) Qualquer ordem: crescente, decrescente ou por uma propriedade específica
Suporte a tipos de dados Números, texto, datas Números, texto, datas e objetos com propriedades
Sintaxe do comparador Nenhum (omitido) a - b, b - a, ou bloco if() para texto
Lida com valores nulos Não (pode gerar erro) Sim, com verificações explícitas de empty()

Agora você pode ordenar qualquer array em fórmulas do Notion exatamente da maneira que precisa. Comece com um comparador numérico simples, depois estenda para ordenação por texto e data. Para arrays complexos com tipos mistos, adicione verificações de vazio e use notação de colchetes para nomes de propriedades com espaços. Pratique criando um banco de dados de teste com um rollup e aplicando um comparador personalizado para ver a saída ordenada mudar em tempo real.

ADVERTISEMENT