2
respostas

[Bug] Se inverto as listas, o código não funciona!

Olá. Refiz o projeto como a instrutora orientou, porem ao rodar o arquivo ele buga. Apresenta o seguinte erro:

.../index.js:25 listaFinal.push(produtoAtualLista1); ^ ReferenceError: produtoAtualLista1 is not defined

No console.log quando vamos passar os parametros das funcoes, se eu fizer como a professora e colocar a edGalho como lista1 e a edFolha como lista2, o codigo funciona normalmente, porem se fizer o contrario, o codigo da esse erro. Mas o correto nao seria a edFolha ser a lista1 e a edGalho a lista2? Segue o codigo:

    const { edFolha, edGalho } = require("./arrays");

    function juntaListas(lista1, lista2){
        const listaFinal = [];
        let indiceAtualLista1 = 0;
        let indiceAtualLista2 = 0;

    
    while (indiceAtualLista1 < lista1.length && indiceAtualLista2 < lista2.length){
        let produtoAtualLista1 = lista1[indiceAtualLista1];
        let produtoAtualLista2 = lista2[indiceAtualLista2];
        
        console.log(`comparando ${produtoAtualLista1.titulo} com ${produtoAtualLista2.titulo}`);

        if (produtoAtualLista1.preco < produtoAtualLista2.preco){
            listaFinal.push(produtoAtualLista1);
            indiceAtualLista1++;
        } else {
            listaFinal.push(produtoAtualLista2);
            indiceAtualLista2++
        };
    };

    while (indiceAtualLista1 < lista1.length){
        listaFinal.push(produtoAtualLista1);
        indiceAtualLista1++;
    };
    
    while (indiceAtualLista1 < lista1.length){
        listaFinal.push(produtoAtualLista1);
        indiceAtualLista1++;
    };

    return listaFinal;
};

console.log(juntaListas(edFolha, edGalho));
2 respostas

Opa, Bruno! Tudo bem?

Analisando o seu código percebi alguns problemas:

  • Primeiramente, o erro compartilhado é causado porque nos dois while você está tentando utilizar a variável produtoAtualLista2, mas ela existe somente dentro do escopo do primeiro while.

  • Além disso, esses dois while que comentei anteriormente, na ordem edGalho, edFolha, não estão sendo executados, caso você comente eles o código rodará sem erros, e na ordem edFolha, edGalho, se eles tiverem comentados, o erro também não irá ocorrer.

  • Por fim, o maior causador dos seus problemas é a forma que você está incrementando os valores na lista final, ao fazer isso usando o método .push(). Durante a aula a instrutora implementou de uma forma um pouco diferente para que esse tipo de erro não ocorra. Segue o código:

const { edGalho, edFolha } = require('./arrays');

function juntaListas(lista1, lista2) {
    let listaFinal = [];
    let posicaoAtualLista1 = 0;
    let posicaoAtualLista2 = 0;
    let atual = 0;

    while (posicaoAtualLista1 < lista1.length && posicaoAtualLista2 < lista2.length) {
        let produtoAtualLista1 = lista1[posicaoAtualLista1];
        let produtoAtualLista2 = lista2[posicaoAtualLista2];

        if (produtoAtualLista1.preco < produtoAtualLista2.preco) {
            listaFinal[atual] = produtoAtualLista1;
            posicaoAtualLista1++;
        } else {
            listaFinal[atual] = produtoAtualLista2;
            posicaoAtualLista2++;
        }
        atual++;
    } 

    while (posicaoAtualLista1 < lista1.length) {
        listaFinal[atual]=lista1[posicaoAtualLista1];
        posicaoAtualLista1++;
        atual++;
    }

    while (posicaoAtualLista2 < lista2.length) {
        listaFinal[atual]=lista2[posicaoAtualLista2];
        posicaoAtualLista2++;
        atual++;
    }

    return listaFinal;
}

console.log(juntaListas(edGalho, edFolha));

Nessa implementação a instrutora utilizou de uma variável auxiliar para ser auto-incrementada a cada posição trabalhada, assim a posição que o valor será inserido na listaFinal será relativo ao passo da operação, fazendo com que aquele erro não ocorra em nenhuma sequência passagem dos objetos para a função juntaListas().

Espero ter ajudado, caso tenha mais problemas ou dúvidas, estarei à disposição.

Grande abraço e bons estudos!

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

mas ainda nao entendi o pq nao se poder utilizar do metodo .push()