1
resposta

[Dúvida] Outra forma de resolver - exercício 5

Olá, resolvi o exercício 5 dessa forma - criando uma função e retornando outro array com os dados pedidos, segue...

const numeros = [3, 8, 12, 5, 6, 10, 7, 2, 9, 14];

function sohPar(numeros) {
    let novoNumeros = [];
    for(let numero of numeros) {
        if((numero % 2) === 0) {
            novoNumeros.push(numero);
        }
    }
    return novoNumeros;
}

console.log(sohPar(numeros));

Porém, gostaria de saber como fazer para em vez de retornar outro array, somente modificar o original, algo assim:

const numeros = [3, 8, 12, 5, 6, 10, 7, 2, 9, 14];

function sohPar(numeros) {
    let novoNumeros = [];
    for(let numero of numeros) {
        if((numero % 2) === 0) {
            novoNumeros.push(numero);
        }
    }
    numeros = novoNumeros;
}

sohPar(numeros); // aqui trocaria os dados do array original

console.log(numeros); // e aqui exibiria o array original com os dados atuais

Como poderia fazer isso?

1 resposta

Olá, Giuli!

No JavaScript, quando você atribui um novo valor a um parâmetro dentro de uma função, isso não altera o array original fora da função, pois a reatribuição não afeta a referência externa.

Uma maneira de alterar o array original é utilizando o método splice para remover todos os elementos do array e depois adicionar de volta apenas os elementos que você deseja manter. Aqui está como você pode fazer isso:

const numeros = [3, 8, 12, 5, 6, 10, 7, 2, 9, 14];

function sohPar(numeros) {
    let i = 0;
    while (i < numeros.length) {
        if (numeros[i] % 2 !== 0) {
            numeros.splice(i, 1); // remove o elemento na posição i
        } else {
            i++; // incrementa o índice apenas se não removermos um elemento
        }
    }
}

sohPar(numeros); // aqui modifica o array original

console.log(numeros);

Nesse caso Giuli, podemos utilizar um loop while para iterar sobre o array numeros. Se o número atual for ímpar, usamos splice para remover esse elemento do array. Se for par, simplesmente incrementamos o índice i para continuar a iteração.

Acredito que seja um pouco mais trabalhoso, porém é muito bacana e acaba otimizando o código, além de que o seu primeiro código é bacana porque dá para "reciclar" o primeiro Array, caso queira utilizar em outro momento do código.

Reforço que em casos de dúvidas, conte sempre com o fórum da comunidade Alura! Bons estudos!

Sucesso

Um grande abraço e até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!