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)ondeaebsão elementos do array. Retorne negativo para colocaraantes deb, positivo para o inverso, ou zero para manter a ordem original. - Ordenar por propriedade: Use
a.nomePropriedadeeb.nomePropriedadedentro do comparador para ordenar objetos por um campo específico.
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):
adeve vir antes deb - Zero (0): a ordem de
aebpermanece inalterada em relação um ao outro - Número positivo (ex.: 1):
bdeve vir antes dea
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
- 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. - Escreva a fórmula com um comparador
No editor de propriedades de fórmula, insira:sort(prop("Pontuações"), a - b). A expressãoa - bretorna um número negativo quandoaé maior queb, colocando valores maiores primeiro. - 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
- 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 propriedadePrioridade. - 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). - 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
- Prepare o comparador para texto
O Notion não possui um operador de comparação de strings nativo. Use a funçãoif()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))). - Aplique a fórmula
SubstituaItenspelo nome da sua propriedade de rollup eNomepela propriedade de texto pela qual deseja ordenar. O comparador compara os valores de texto usando os operadores menor que e maior que. - 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
- 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. - 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. - Ordenar por data de vencimento decrescente (mais recente primeiro)
Inverta a subtração:sort(prop("Tarefas"), b.Data de Vencimento - a.Data de Vencimento).
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.