1
resposta

Duvida

estou fazendo por partes para ir testando, montei assim

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

let lista1 = [];
let lista2 = [];

function margeSort(array){

    if(array.length > 1){

        let meioArray = Math.floor(array.length/2);
        lista1 = array.splice(0,meioArray);
        lista2 = array.splice(meioArray, array.length);

    }

}

margeSort(listaLivros);

console.log(lista1);
console.log(lista2);

oq sai

[
  { titulo: 'Go', preco: 45 },
  { titulo: 'C++', preco: 35 },
  { titulo: 'Java', preco: 30 },
  { titulo: 'PHP', preco: 15 },
  { titulo: 'Elixir', preco: 50 }
]
[ { titulo: 'Python', preco: 20 } ]

porem nao estou conseguindo entender pq nao esta dividindo corretamente, no caso era para a outra metade do array ir para lista2 porem somente o ultimo elemento esta indo

1 resposta

Oi, Nicolas! Como vai?

Para dividir corretamente o array, precisamos utilizar o método do JavaScript chamado slice(). Observe que, em seu código, usou-se um outro método, o splice().

O método splice modifica o array original removendo ou substituindo elementos existentes. Nesse sentido, quanto o utilizamos duas vezes seguidas, estamos, na realidade, alterando a configuração de listaLivros — e consequentemente a quantidade de livros presentes em lista1 e lista2.

Enquanto isso, o slice() retorna um novo array que contém os elementos do array original, por meio de uma cópia. Como não há uma alteração em listaLivros, conseguimos reparti-la normalmente e enviar cópias desta divisão para lista1 e lista2!

Nesse sentido, sabendo das diferenças entre esses métodos, basta substituir, em seu código, o splice() pelo slice(), assim:

lista1 = array.slice(0,meioArray);
lista2 = array.slice(meioArray, array.length);

Espero ter ajudado, Nicolas! Caso surjam novas dúvidas, estarei por aqui.

Um abraço!

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