Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Onde está o erro?

Segue meu código:

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

function mergeSort(array){ if(array.length > 1){ const meio = Math.floor(array.length / 2); const parte1 = mergeSort(array.slice(0, meio)); const parte2 = mergeSort(array.slice(meio, array.length)); array = ordena(parte1, parte2);

}

return array;

}

function ordena(parte1, parte2){ let posicaoAtualParte1 = 0 let posicaoAtualParte2 = 0 const resultado = []

while(posicaoAtualParte1 < parte1.length && posicaoAtualParte2 < parte2.length){
    let produtoAtualParte1 = parte1[posicaoAtualParte1];
    let produtoAtualParte2 = parte2[posicaoAtualParte2];

    if (produtoAtualParte1.preco < produtoAtualParte2.preco){
        resultado.push(produtoAtualParte1);
        posicaoAtualParte1++;
    }else{
        resultado.push(produtoAtualParte2);
        posicaoAtualParte2
    }
}

return resultado.concat(posicaoAtualParte1 < parte1.length
    ? parte1.slice(posicaoAtualParte1)
    : parte2.slice(posicaoAtualParte2))

}

console.log(mergeSort(listaLivros));

Segue o erro:

#

Fatal error in , line 0

Fatal JavaScript invalid size error 169220804

# # #

#FailureMessage Object: 000000EEE22FE820 1: 00007FF640AD7A1F v8::internal::CodeObjectRegistry::~CodeObjectRegistry+114207 2: 00007FF6409F3E9F std::basic_ostream<char,std::char_traits >::operator<<+65023 3: 00007FF6416D27A2 V8_Fatal+162 4: 00007FF6412565F5 v8::internal::FactoryBasev8::internal::Factory::NewFixedArray+101 5: 00007FF6410FFBB3 v8::internal::FeedbackNexus::ic_state+62771 6: 00007FF641116710 v8::Context::GetIsolate+15840 7: 00007FF640F8A261 v8::internal::CompilationCache::IsEnabledScriptAndEval+26913 8: 00007FF641428FC1 v8::internal::SetupIsolateDelegate::SetupHeap+494417 9: 00000270590C9B36

2 respostas
solução!

Oi Gabriel!

O código está correto, com exceção desse trecho:

    if (produtoAtualParte1.preco < produtoAtualParte2.preco){
        resultado.push(produtoAtualParte1);
        posicaoAtualParte1++;
    }else{
        resultado.push(produtoAtualParte2);
        posicaoAtualParte2
    }

Veja que, no else, faltou incrementar o valor de posicaoAtualParte2; o correto é posicaoAtualParte2++. Sem o incremento, bugou a condição de saída para o while e acabou causando um "estouro" no tamanho total do array permitido.

Espero ter ajudado!

Bons estudos ;)

Boa tarde!! Faltava o incremento, de fato. Muito obrigado Ju!