Oi, Carlos, tudo bem?
No código da aula, após o laço while
principal, foram adicionados mais dois laços while
. Esses são responsáveis por verificar se ainda há elementos remanescentes em qualquer uma das duas listas após o término do laço principal. Se houver, esses elementos são adicionados à lista final. Essa parte é importante porque, em alguns casos, uma das listas pode ter mais elementos do que a outra.
No seu código, você está verificando se ainda há elementos em ambas as listas dentro do mesmo laço while
. Isso pode causar um problema quando uma das listas terminar antes da outra, porque a condição listaUm[i].preco < listaDois[j].preco
pode tentar acessar um elemento que não existe (quando i
ou j
ultrapassarem o tamanho da lista correspondente), o que resultará em um erro.
Para solucionar isso, você pode adicionar condições extras para verificar se i
ou j
ultrapassaram o tamanho de suas listas correspondentes. Aqui está um exemplo de como você pode fazer isso:
function juntaOrganiza(listaUm, listaDois) {
let lista = [];
let i = 0, j = 0;
while (i < listaUm.length || j < listaDois.length) {
if (i < listaUm.length && j < listaDois.length) {
if (listaUm[i].preco < listaDois[j].preco) {
lista.push(listaUm[i++]);
}
else {
lista.push(listaDois[j++]);
}
} else if (i < listaUm.length) {
lista.push(listaUm[i++]);
} else {
lista.push(listaDois[j++]);
}
}
return lista;
}
Nesse código, adicionamos uma condição extra para verificar se i
ou j
ultrapassaram o tamanho de suas listas correspondentes. Se i
ainda estiver dentro do tamanho de listaUm
e j
ainda estiver dentro do tamanho de listaDois
, ele compara os preços e adiciona o menor à lista. Se i
ainda estiver dentro do tamanho de listaUm
mas j
já tiver ultrapassado o tamanho de listaDois
, ele adiciona o elemento de listaUm
à lista. O mesmo acontece se j
ainda estiver dentro do tamanho de listaDois
mas i
já tiver ultrapassado o tamanho de listaUm
.
Espero ter ajudado. Caso tenha dúvidas, conte com o fórum. Abraços!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!