Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] e se no final não estiver na ordem?

Na aula ao resolver os dois últimos que faltavam entrar no array, foi inserido eles, mas sentir falta de verificar se eles estariam na ordem certa de preços. Minha ideia de cod. que n funcionou

  while(posicaoAtualArr1 < lista1.length) {
        let livroSeguinte1 = posicaoAtualArr1 + 1
        if(posicaoAtualArr1.preco < livroSeguinte1.preco) 
        {arrayFinal[atual] = lista1[posicaoAtualArr1];}
        else {
            arrayFinal[atual] = lista1[posicaoAtualArr1]
            posicaoAtualArr1++;
            atual++;
        }

    }

    while(posicaoAtualArr2 < lista2.length) {
        let livroSeguinte = posicaoAtualArr2 + 1
        if(posicaoAtualArr2.preco < livroSeguinte.preco) 
        {arrayFinal[atual] = lista2[posicaoAtualArr2];
        }
        else {
            arrayFinal[atual] = lista2[posicaoAtualArr2]
            posicaoAtualArr2++;
            atual++;
        }

    }
atual++;
}

    return arrayFinal;
}

console.log(juntarListas(edGalho, edFolha));
1 resposta
solução!

Olá, Marllon! Entendo sua preocupação com a ordenação dos itens ao final do array. No entanto, a lógica do algoritmo apresentado na aula é baseada na premissa de que as duas listas iniciais já estão ordenadas. Portanto, quando um dos arrays se esgota, os elementos restantes do outro array já estão na ordem correta e podem ser adicionados diretamente ao final do array resultante.

Quanto ao seu código, parece que você está tentando acessar a propriedade preco diretamente em posicaoAtualArr1 e posicaoAtualArr2, que são índices, não objetos. Você deveria acessar a propriedade preco dos objetos dentro dos arrays. Aqui está um exemplo corrigido:

while(posicaoAtualArr1 < lista1.length) {
    let livroSeguinte1 = posicaoAtualArr1 + 1
    if(lista1[posicaoAtualArr1].preco < lista1[livroSeguinte1].preco) 
    {arrayFinal[atual] = lista1[posicaoAtualArr1];}
    else {
        arrayFinal[atual] = lista1[posicaoAtualArr1]
        posicaoAtualArr1++;
        atual++;
    }
}

while(posicaoAtualArr2 < lista2.length) {
    let livroSeguinte = posicaoAtualArr2 + 1
    if(lista2[posicaoAtualArr2].preco < lista2[livroSeguinte].preco) 
    {arrayFinal[atual] = lista2[posicaoAtualArr2];
    }
    else {
        arrayFinal[atual] = lista2[posicaoAtualArr2]
        posicaoAtualArr2++;
        atual++;
    }
}

Porém, é importante notar que este código pode causar um erro de "índice fora dos limites" se livroSeguinte1 ou livroSeguinte for igual ao comprimento do array, pois não haverá elemento em lista1[livroSeguinte1] ou lista2[livroSeguinte]. Então, você deve verificar se livroSeguinte1 ou livroSeguinte é menor que o comprimento do array antes de acessar o elemento.

Espero ter ajudado e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software