Ainda sou muito novo em TypeScript. Trabalhando em um projeto Next.js, estou exibindo uma lista de itens agrupados com títulos. Se não houver itens no grupo que atendam a um critério específico, não quero exibir o título ou os itens. Já usei a Array.any()
função Kotlin antes como uma forma de dizer "se algum item corresponder a esse critério, inclua-o". Não encontrei uma maneira de fazer isso diretamente em TypeScript. No exemplo abaixo, gostaria de manter a Item
lista se algum de seus itens tiver um someProp = null
. A única maneira que encontrei de fazer isso, até agora, é usando, !Array.every()
mas a dupla negativa "nem todo item.someProp é nulo" é realmente pesada na complexidade cognitiva. Existe uma maneira melhor de fazer isso?
{Object.entries(groupedListData!)
.filter(
([key, itemsGroupedByKey]) =>
!itemsGroupedByKey.every(
(item) => item.someProp !== null
)
)
...
Li todas as funções de Array e nenhuma delas parece se encaixar perfeitamente. Também li sobre estender a classe interna Array com a minha própria, any()
mas isso me parece um pouco pesado. Não precisarei disso para mais do que alguns pontos no código.
Você pode usar o método
some
( MDN Docs ) para fazer isso. Então, no seu exemplo acima, você poderia fazer algo como:Apenas para maior aprendizado, incluí uma versão genérica da função para que você possa reutilizá-la conforme mencionado anteriormente. O recurso TS que usei aqui é chamado de Variável de Tipo Genérico , que permitirá a reutilização
filterEntries
em qualquer tipo de dado agrupado.