Salve Salveee.
Por algum motivo o while está acusando que o parametro parte2 retorna um tamanho (length) undefined no segundo processo, da funcao ordena() Segue o array original
const editora1 = [
{
nome: "Python",
preco: 32
},
{
nome:"Java",
preco: 40
},
{
nome:"Php",
preco: 70
},
{
nome:"JavaScript",
preco: 60
},
{
nome:"Rust",
preco: 53
},
{
nome: "Rubi",
preco: 12
},
{
nome: "Elixir2.0",
preco: 32
}
];
module.exports = editora1
Segue agora o script
const listaLivros = require("./editoras.js");
//console.log(listaLivros)
function mergeSort(array){
if(array.length > 1){
let meioDoArray = Math.floor(array.length / 2);
let primeiraParte = mergeSort(array.slice(0, meioDoArray));
let segundaParte = mergeSort(array.slice(meioDoArray, array.length));
array = ordena(primeiraParte, segundaParte);
}
return array
}
function ordena(parte1, parte2){
console.log(parte1, parte2)
let posicaoAtualParte1=0;
let posicaoAtualParte2=0;
let arrayOrganizado = [];
while(parte1.length > posicaoAtualParte1 && parte2.length > posicaoAtualParte2){
let produtoAtualParte1 = parte1[posicaoAtualParte1];
let produtoAtualParte2 = parte2[posicaoAtualParte2];
if(produtoAtualParte1.preco < produtoAtualParte2.preco){
arrayOrganizado.push(parte1[posicaoAtualParte1])
posicaoAtualParte1++
}else{
arrayOrganizado.push(parte2[posicaoAtualParte2])
posicaoAtualParte2++
}
}
arrayOrganizado.concat(posicaoAtualParte1 < parte1.length ?
parte1.slice(posicaoAtualParte1)
: parte2.slice(posicaoAtualParte2));
}
mergeSort(listaLivros);
//console.log(mergeSort(listaLivros))