Estou com dificuldades de arrays, funções, retorno
4 respostas
functionarrayjavascript
I
igorp332
Olá boa tarde. Tenho uma lista de exercícios para praticar mais sobre arrays, funções e retornos e tenho uma dúvida que não estou conseguindo como vou colocar os arrays. A pergunta é a seguinte:
Desenvolva uma função chamada dominantePet que receba um parâmetro:
list, um array de strings contendo as palavras “dog” ou “cat” escritas sem um padrão definido.
E deve retornar uma string com o tipo de bichinho que aparece mais vezes no array, ou seja, a dominante maiúscula e com uma exclamação (“CAT!” ou “DOG!”). Se a quantidade dos dois for a mesma, deve retornar a string “DRAW!”.
Obrigado mesmo! Vou ver aqui como vai ficar. Muito obrigado!
H
hugokotsubo2 likes
Reparou que tanto no if quanto no else if você faz a mesma coisa? Ou seja, se for gato ou cachorro, vc faz exatamente a mesma ação: adiciona s no array a. Não faz o menor sentido.
Se quer saber quantos gatos e quantos cachorros têm ali, então precisa ter dois contadores separados. Depois, você compara os contadores:
functiondominantePet(animals){// variações, coloque todas que forem necessáriasvarcatVariants=["gato","cat"];vardogVariants=["cachorro","cão","dog"];// um contador para cada tipo de animalvardogs=0;varcats=0;for(varanimalofanimals){// converte para minúscula, assim não precisa testar milhares de variaçõesanimal=animal.toLowerCase();// use includes para saber se o animal está no array, e adicione o respectivo contadorif(catVariants.includes(animal)){cats++;}elseif(dogVariants.includes(animal)){dogs++;}}if(cats>dogs){return"CAT!"}elseif(dogs>cats){return"DOG!"}else{// se não entrou em nenhum dos if's acima, é porque são iguais, então nem precisa testarreturn"DRAW!"}}constanimals=["DoG","cat","cAT","dOg","cat","Dog","caT","dog"];console.log(dominantePet(animals));
Claro que com filter também dá (como foi sugerido acima), mas cuidado com essa história de que “tira a necessidade de usar o loop”. Ele pode até “tirar” o loop do código, mas lembre-se que um filter no fundo também é um loop, só que “escondido”. Ele percorre o array da mesma forma que o for, a única diferença é que você não precisou escrever o loop.
Outro detalhe é que ao chamar filter duas vezes, você está percorrendo o array duas vezes. E cada chamada de filter retorna outro array contendo os elementos filtrados. Mas nesse caso você só quer saber a quantidade, então eu acho desnecessário criar esses arrays extras só para pegar o tamanho. Fazer um único loop como eu fiz acima, e manter apenas os contadores (em vez de criar outros arrays só para pegar o tamanho) me parece bem mais simples.
Claro que para um exercício simples e/ou para poucos arrays pequenos rodando poucas vezes, não fará tanta diferença assim. Mas se tivesse que verificar vários tipos diferentes de animais, com arrays maiores (milhares/milhões de elementos), aí começaria a fazer diferença (veja aqui).
Ah, também corrigi o nome da função para dominantePet (faltou um “te” antes do “P”)
I
igorp332
Beleza, obrigado mesmo. Vou ajeitar aqui os erros.