TransWikia.com

Imprimir dados diferentes de um array, de acordo com o valor do elemento

Stack Overflow em Português Asked by José Sousa on November 17, 2021

Temos uma lista com nomes de todos os integrantes da família mas
esqueceram de colocar o sobrenome!.

Seu desafio será imprimir nome junto com o sobrenome "Macedo" para
cada integrante da família. Mas temos uma exceção, temos um integrante
com sobrenome diferente, se tiver algum "Pedro", coloque o sobrenome
"Sousa".

Dica: Utilize for e continue para criar a solução. Acrescente um
espaço antes do sobrenome, por exemplo: " Sousa".

Código que eu fiz:

var familia = ["Joana", "Felipe", "Gabriela", "Carlos", "Pedro", "Bruno"] 
var familia2 = " " 
for (i = 0; i < familia.length; i++){ 
    if( familia[i] == 'Pedro' ){ 
        console.log(familia[i] + ' Sousa') 
        continue 
    } 
    else if(familia[i] == 'Pedro'){ 
        console.log(familia[i] + ' Macedo')  
    }  
 }

5 Answers

const familia = ["Joana", "Felipe", "Gabriela", "Carlos", "Pedro", "Bruno"]

familia.forEach(nome => { console.log(${nome} ${nome === 'Pedro' ? 'Sousa' : 'Macedo'}) })

Answered by MADS1974 on November 17, 2021

for (var i = 0; i < familia.length; i++){
    if (familia[i] == "Pedro")
    console.log(familia[i] + " Sousa")
    
    if(familia[i] !== "Pedro")
    console.log(familia[i] + " Macedo")
    continue
 } 

Olá , consegui a solução do código assim:

No terminal do exercício não permitia o uso do else, ou else if... e exigia o uso do continue. foi a única forma que consegui fazer rodar. Espero que contribua.

Answered by Maurício Costa on November 17, 2021

Como no exercício pedia o uso do continue, fiz assim

var familia = ["Joana", "Felipe", "Gabriela", "Carlos", "Pedro", "Bruno"]

for (var i = 0; i < familia.length; i++){
    if(familia [i] == "Pedro") {
        console.log(familia[i] + " Sousa")
        continue
    }
    console.log( familia[i] + " Macedo")
}

Answered by Karine Kerr on November 17, 2021

O problema está no seu if:

if( familia[i] == 'Pedro' ){ 
    console.log(familia[i] + ' Sousa') 
    continue 
}  else if(familia[i] == 'Pedro'){ 
    console.log(familia[i] + ' Macedo')  
}

Primeiro você testa se o nome é "Pedro". Depois no else você testa se é "Pedro" de novo. Não faz sentido testar a mesma coisa duas vezes.

Além disso, o continue dentro do if é desnecessário. Usando apenas o if e else você já garante que somente um dos caminhos é executado.

Segundo a regra do exercício, o que você deve fazer é: se o nome for "Pedro", sobrenome é "Sousa". Senão (para qualquer outro nome que não seja "Pedro") o sobrenome é "Macedo". Então ficaria assim:

var familia = ["Joana", "Felipe", "Gabriela", "Carlos", "Pedro", "Bruno"];
for (var i = 0; i < familia.length; i++) {
    if (familia[i] == 'Pedro') { // se o nome é Pedro, o sobrenome é Souza
        console.log(familia[i] + ' Sousa');
    } else { // senão (se o nome não é Pedro), o sobrenome é Macedo
        console.log(familia[i] + ' Macedo');
    }
}

Também removi a variável familia2 que não estava sendo usada para nada. E coloquei ponto e vírgula no final das linhas - sei que é opcional (o JavaScript não reclama se não tiver) e pode parecer "frescura", mas isso evita algumas situações bizarras que podem ocorrer se você não usá-los, como essa e essa (veja mais sobre isso aqui).


Outra forma de fazer é usar um for...of para percorrer o array, e template strings para imprimir:

var familia = ["Joana", "Felipe", "Gabriela", "Carlos", "Pedro", "Bruno"];
for (var nome of familia) {
    if (nome == 'Pedro') {
        console.log(`${nome} Sousa`);
    } else {
        console.log(`${nome} Macedo`);
    }
}

Ou ainda o forEach, como sugerido na outra resposta.


Sobre o uso de continue

O exercício dá a "dica" de usar continue, mas eu acho completamente desnecessário. A ideia do continue é ir para a próxima iteração do for, ignorando qualquer coisa que venha depois.

Então ficaria assim:

var familia = ["Joana", "Felipe", "Gabriela", "Carlos", "Pedro", "Bruno"];
for (var i = 0; i < familia.length; i++) {
    if (familia[i] == 'Pedro') { // se o nome é Pedro, o sobrenome é Souza
        console.log(familia[i] + ' Sousa');
        continue;
    }

    console.log(familia[i] + ' Macedo');
}

Ou seja, se entrar no if, ele imprime "Pedro Souza" e o continue faz com que ele vá para a próxima iteração do for (no caso, irá para o nome "Bruno"). Se o nome não for "Pedro", não entra no if e imprime o sobrenome "Macedo".

Mas eu acho uma complicação desnecessária, somente para forçar o uso do continue. Ainda acho a solução com if/else mais simples e clara.

Answered by hkotsubo on November 17, 2021

Tente isso aqui amigo

const familia = ["Joana", "Felipe", "Gabriela", "Carlos", "Pedro", "Bruno"]

familia.forEach(nome => {
  console.log(`${nome} ${nome === 'Pedro' ? 'Sousa' : 'Macedo'}`)
})

Answered by Jason Rabelo on November 17, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP