1
resposta

Dúvida com código

Tentei trazer uma função para verficar o produto com o menor valor entre das amostras mas o código n tá conseguindo rodar. Algum conselho de onde pode estar o erro ?

const listaLivros = require("./array");


function margeSort(array){
    if(array.length > 1){
        const meio = Math.floor(array.length / 2);
        const primeiraParte = margeSort(array.slice(0, meio));
        const segundaParte = margeSort(array.slice(meio, array.length));
        array = ordenarArray(primeiraParte, segundaParte);
    };
    return array;
};

function ordenarArray (primeiroArray, segundoArray){
    let posicaoAtualPrimeiroArray = 0;
    let posicaoAtualSegundaArray = 0;
    const arrayOrdenado = [];

    while(posicaoAtualPrimeiroArray < primeiroArray.length && posicaoAtualSegundaArray < segundoArray.length){
        let objetoAtualPrimeiroArray = primeiroArray[posicaoAtualPrimeiroArray];
        let objetoAtualSegundoArray = segundoArray[posicaoAtualSegundaArray];
        arrayOrdenado.push(verificarMenorPreco(objetoAtualPrimeiroArray,objetoAtualSegundoArray));
    };

    return arrayOrdenado.concat(posicaoAtualPrimeiroArray < primeiroArray.length 
        ? primeiroArray.slice(posicaoAtualPrimeiroArray)
        : segundoArray.slice(posicaoAtualSegundaArray)
        );
};

function verificarMenorPreco(primeiroObjeto, segundoObjeto){
    if(primeiroObjeto.preco < segundoObjeto.preco){
        return primeiroObjeto;
    }else{
        return segundoObjeto;
    }
};

console.log(margeSort(listaLivros));
1 resposta

Olá Arthur! Tudo certo?

Peço desculpas pela demora no retorno.

Há um erro no código na função ordenarArray, especificamente no while loop. O loop nunca será interrompido, pois as variáveis de posição do array nunca são atualizadas dentro do loop.

E para corrigir o código, adicione posicaoAtualPrimeiroArray++ ouposicaoAtualSegundaArray++ dentro do loop, dependendo de qual objeto foi adicionado ao array ordenado:

  while (posicaoAtualPrimeiroArray < primeiroArray.length && posicaoAtualSegundaArray < segundoArray.length) {

    let objetoAtualPrimeiroArray = primeiroArray[posicaoAtualPrimeiroArray];
    let objetoAtualSegundoArray = segundoArray[posicaoAtualSegundaArray];

    let menor = verificarMenorPreco(objetoAtualPrimeiroArray, objetoAtualSegundoArray)

    if (menor == objetoAtualPrimeiroArray) {

      posicaoAtualPrimeiroArray++;

    } else {

      posicaoAtualSegundaArray++;

    }
    arrayOrdenado.push(menor);
  };

Caso tenha ficado com alguma dúvida, não deixe de compartilhar!

Continue praticando e evoluindo na sua jornada.

Bons estudos e até mais!

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