1
resposta

Tentei desse jeito somente vendo o video de explicação do algoritmo. (tiver algo errado, perdão supremo).

const lista1 = [
    {
    nome : "Dean",
    valor: 1,
    },
    {
        nome : "Jhon",
        valor: 50,
    }
    ,{
        nome: "Sammy",
        valor : 60,
}];
const lista2 = [
    {
        nome : "Barney",
        valor : 1,
    },
    {
        nome : "BarnacOU",
        valor : 2,
    },
    {
        nome : "BarT",
        valor : 10,
    },
    {
    nome : "BarLix",
    valor : 14,
    },
    {
        nome : "Marshal",
        valor : 75,
    },
    {
        nome : "Lilian",
        valor : 80,
    }
];
let listaNova = [], contadorLista1 = 0, contadorLista2 = 0;
for(let contVez ;contadorLista1 < lista1.length && contadorLista2 < lista2.length; contVez++){
    
    console.log(`comparando o ${contadorLista1} com o ${contadorLista2}`);
    if(lista1[contadorLista1].valor < lista2[contadorLista2].valor){
        listaNova.push(lista1[contadorLista1]);
        contadorLista1++;
    }
    else if(lista1[contadorLista1].valor > lista2[contadorLista2].valor){
        listaNova.push(lista2[contadorLista2]);
        contadorLista2++;
    }else if(lista1[contadorLista1].valor == lista2[contadorLista2].valor){
        listaNova.push(lista1[contadorLista1]);
        listaNova.push(lista2[contadorLista2]);
        contadorLista1++;
        contadorLista2++;
    }
   
};
for(contadorLista1; contadorLista1 < lista1.length; contadorLista1++){
    listaNova.push(lista1[contadorLista1]);
};
for(contadorLista2 ;contadorLista2 < lista2.length; contadorLista2++){
    listaNova.push(lista2[contadorLista2]);
}

console.log(listaNova);
1 resposta

Oi Márcio, tudo bem?

O seu código tá bem estruturado e seguindo a lógica explicada no vídeo.

Mas notei que você não inicializou a variável contVez que controla o loop for. Isso pode gerar um comportamento indefinido, pois a variável não tem um valor inicial.

Você pode corrigir isso inicializando contVez com um valor, como 0, por exemplo:

for(let contVez = 0; contadorLista1 < lista1.length && contadorLista2 < lista2.length; contVez++){

Outro ponto é que seu código atual não está tratando o caso em que um dos arrays acaba antes do outro durante a comparação. Isso pode causar um erro, pois seu código tentará acessar um elemento que não existe (undefined) em um dos arrays.

Para evitar isso, você pode adicionar uma verificação adicional para garantir que os elementos existem antes de compará-los:

if(contadorLista1 < lista1.length && (contadorLista2 == lista2.length || lista1[contadorLista1].valor < lista2[contadorLista2].valor)){
    listaNova.push(lista1[contadorLista1]);
    contadorLista1++;
}
else if(contadorLista2 < lista2.length){
    listaNova.push(lista2[contadorLista2]);
    contadorLista2++;
}

Neste caso, se o contador de um dos arrays atingir o comprimento do array (ou seja, todos os elementos já foram processados), o código adicionará automaticamente os elementos restantes do outro array à lista nova.

Espero ter ajudado.

Um abraço 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