Para resolver problemas o primeiro passo é entender o problema. A filosofia nos indica algumas formas de pensamento lógico. Sugiro que compreenda os pensamentos indutivo e o dedutivo. São mais conhecidos como pensamento científico. O primeiro parte do caso particular para o geral enquanto que o segundo faz o contrário. Você deve estar pensando mas como aplico isso na resolução de problemas?

Veja bem... Imagina que você tem uma situação problema em que precisa de identificar padrões em palavras, muitos problemas de desafios trazem isso.

Vamos supor o seguinte problema: Dado uma lista de tamanho "n" sendo que 0 < n < 10000, contendo strings de tamanho "m" sendo que 1 < m < 10 encontre e retorne todos os casos em que há agrupamento de vogais, agrupados por tamanho de agrupamento.

Partindo do pensando indutivo teríamos o seguinte raciocínio. Quero encontrar o padrão vogais, o primeira caso particular mais óbvio seria "aa", dessa forma poderia escrever um algoritmo passe por cada um dos itens e me retorne se existe "aa". Feito um teste para isso e verificando que está encontrando o que eu preciso, vou para os próximos casos: "ee", "ii", "oo", "uu". Realizado essa parte de acordo com o método indutivo partiria para casos mais gerais, o pensamento seria quais as demais situações em que há agrupamento de vogais? Obviamente "aaa", "aaaa", "aaaaa" e assim por diante. Observe que tratar cada caso particular seria tedioso e desgastante. Dessa forma precisamos de mudar de estratégia. Outra estratégia que podemos tentar utilizar é procurar por vogais e verificar se o próximo caracter é vogal. Com isso podemos repetir até que mude o caracter. Essa estratégia parece resolver parte do problema, porém podem surgir situações não pensadas... Por exemplo "aankugeee", este caso é um duplo match e precisa de ser tratado de forma diferenciada, como o enunciado não menciona como tratar esse caso específico precisa-se de tomar uma decisão. Vamos considerar apenas que o caso maior ganha, dessa forma não terá repetição na lista. Isso gera o problema de que talvez precisemos de fazer mais de uma interação em cada palavra. E assim continua o raciocínio.

Partindo do pensando dedutivo, partiremos do caso mais geral, qual o caso mais geral? Não ter vogal! Ótimo, eliminamos todos os itens que não tem nenhuma vogal. Agora temos a garantia que não existe nenhum caso que não teria um agrupamento, mas note que poderia haver "a" e "ahifva" esses casos não nos interessa então eliminamos palavras com tamanho 1. O outro problema pode ser tratado agrupar as palavras por quantidade de vogais, palavras podem aparecer em mais de uma lista por conta da situação "aahikifdir". Assim pra cada lista verificamos de acordo com o raciocínio de ver caracteres agrupados mencionado anteriormente. E assim por diante

Veja que lista remete a loop, se a if, identificar a if ou a array.includes().

O resto é experiência de desenvolvimento. Quanto mais praticar melhor você fica. Espero ter ajudado.