Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] como resolvo com forEach( )

ainda estou engatinhando com JS, então tentei resolver o desafio do instrutor desenvolvendo o forEach( ), porém não estou conseguindo chegar ao resultado

const nomes = ["Ana", "Clara", "Maria", "Maria", "João", "João", "João"];

nomes.forEach((nome, indice) => {
    if(nome === nome){
        nome[indice].splice(nome[indice]);
    }
})
console.log(nomes);

retorna q nome[indice].splice( ) não é uma função!

como resolver?

4 respostas
solução!

Para resolver usando forEach, seria necessário que a cada iteração fosse manipulado uma variável externa. O if(nome === nome) sempre será true, na primeira iteração é o mesmo que if ('nome: Ana' === 'nome:Ana'), e o método splice é usado para Arrays, e o valor manipulado é uma string, justificando o erro.

const nomes = ["Ana", "Clara", "Maria", "Maria", "João", "João", "João"];
const semNomesRepetidos = [];

nomes.forEach((nome) => {

    if (!semNomesRepetidos.includes(nome)) {
        semNomesRepetidos.push(nome)
    }

    return semNomesRepetidos
})
console.log(semNomesRepetidos);

Obrigada querido! Abçs

O primeiro parâmetro da função callback parâmetro do forEach representa o valor do indice que está sendo iterado, o segundo representa o numero do índice no qual está sendo iterado, e o terceiro representa o próprio array onde o forEach está percorrendo.

Seu código até funcionaria se você aplicasse o método splice(), chamando o 3° parâmetro da funcao callback, porém não traria o resultado esperado. Vejo que seu objetivo é remover os valores duplicados do array original, para isso a solução abaixo atende aos seus requisitos.

const nomes = ["Ana", "Clara", "Maria", "Maria", "João", "João", "João"];

nomes.forEach((nome, indice, array) => {
// usando o laço for, para percorrer o restante da lista antes do forEach e assim verificar se existem valores duplicados. 
        for(let index = indice + 1; indice < array.length; indice+=1){
           if(array[index] === nome) array.splice(index, 1);
        }
    })
console.log(nomes);

Obs: 0 método splice funciona com uma funcao callback na qual recebe 3 parâmetros, o primeiro é o indice de início da remoção, o segundo é a quantidade de indices a serem removidos contando com o indice de início, a partir do terceiro parâmetro vc coloca o conteúdo que irá substituir os indices que estão sendo removidos, o terceiro parâmetro em diante é opcional. ex forEach(indiceInicio, quantidadeRemocao, substituicao); A funcionalidade desses parâmetros são definidas pelo método que chamamos mesmo, no início é estranho para quem está começando pois diferente de uma funcao normal, neste casa nós não definimos o que cada parâmetro carregará para dentro do bloco.

Oi Lucas, tudo bem? Obrigada por compartilhar seu conhecimento, aliás fiquei com uma dúvida, por que no index do for seu índice começou com + 1?