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

[Dúvida] Método sort está sendo aplicado para livros

function ordenarLivrosPorPreco() {
    let livrosOrdenados = livros;
    livrosOrdenados.sort((a, b) => a.preco - b.preco)
    /* exibirOsLivrosNaTela(aplicarDesconto(livrosOrdenados)) */
    console.log(livros)
    console.log(livrosOrdenados)
}

Gostaria de entender por que o array de livros também está sendo ordenado e não somente livrosOrdenados Resultado do console.log: Console do exemploPelo que percebi pelo que fui testando com console.log, o método sort acontece antes de qualquer outro comando, mas não entendo por que ele afeta junto os livros...

2 respostas

Boa noite Mateus,

o qu acontece é que você está trabalhando com arrays, nesse caso, quando você faz essa operação:

livrosOrdenados = livros;

vc não está copiando os elementos de uma variável para a outra, você está na verdade passando a referência da array, ou seja, quando mexer na referência, vai alterar a origem.

Precisa utilizar alguma função para realizar a cópia, ou até mesmo um laço for para copiar elemento a elemento de uma array para a outra.

solução!

Obrigado pela explicação Matheus, fui atrás pra entender como fazer uma cópia de array e me deparei com esse artigo do freeCodeCamp que explica diversas formas de fazer, adaptei meu código com uma das formas e funcionou da forma que eu queria

function ordenarLivrosPorPreco() {
    let livrosOrdenadosPreco = [...livros]; 
    livrosOrdenadosPreco.sort((a, b) => a.preco - b.preco)
    console.log(livros)
    console.log(livrosOrdenadosPreco)
    exibirOsLivrosNaTela(aplicarDesconto(livrosOrdenadosPreco))
}

console log do array de livros e do array de livos ordenados por preço