Olá tenho bastante dificuldade com algoritmos e estava procurando implementar uma solução alternativa para ordenação da lista de livros.
let maisBarato = 0;
let livroOrdenado = [];
function Ordenador(arr){
for (let i = 0; i < arr.length; i++) {
if(arr[i].preco <= arr[maisBarato].preco){
maisBarato = i;}
}
console.log(maisBarato)
livroOrdenado.push(arr[maisBarato])
arr.splice(maisBarato,1)
}
Ordenador(livros)
Ordenador(livros)
Ordenador(livros)
O processo que procurei implementar foi usando .push e .splice, o for loop traz o indice do menor valor, eu pego o indice .push em uma nova lista e removo ela da propria lista assim posso chamar novamente a funcao Ordenador(livros) para repetir o mesmo processo com a lista sem o menor valor repetindo o processo, posso colocar a propria funcao em outro loop, mas a funcao funciona apenas chamando ela 2 vezes na terceira ela vem com este erro:
/mnt/c/Users/sung/Desktop/Alura/2324-algoritmos-js-aula-1/index.js:11
if(arr[i].preco <= arr[maisBarato].preco){
^
TypeError: Cannot read properties of undefined (reading 'preco')
at Ordenador (/mnt/c/Users/sung/Desktop/Alura/2324-algoritmos-js-aula-1/index.js:11:40)
at Object.<anonymous> (/mnt/c/Users/sung/Desktop/Alura/2324-algoritmos-js-aula-1/index.js:25:1)
at Module._compile (node:internal/modules/cjs/loader:1101:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:17:47
nao consegui entender pq deste erro e pq o .preco estar indefinido
agradeco qualquer ajuda e direcao
Obs: Consegui resolver o problema trazendo o let maisBarato = 0; para dentro da função Ordenador, mas gerou outra dúvida, toda declaração global não é recebida dentro da função? se não , como a função estava funcionando nas 2 primeiras vezes que a função Ordenador foi chamado?