Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Lista ordenada: Return x(1, -1, 0)

Sobre este código:

const clientes = require("./clientes.json")

function ordenar(lista, propriedade){
    const resultado = lista.sort((a, b) => {
        if (a[propriedade] < b[propriedade]){
            return -1;
        }
        if (a[propriedade] > b[propriedade]){
            return 1;
        }
        return 0;
    } )
    return resultado
}
const ordenaNome = ordenar(clientes, "nome")
console.log(ordenaNome)

Eu vi a aula novamente, debugguei o vscode este código, mas ainda não consegui entender porque ter colocado "-1", "1" e "0" no return. Onde é que eles entram no cálculo?

Pelo que entendi (ou tentei entender)

(a[propriedade] < b[propriedade]) é o mesmo que: a: {nome: 'Amye'...} < b{nome: 'Oralle'...}

Neste caso, vai retornar "-1". Desculpem, ainda não entendi porque esses valores. Alguém entendeu a aula e poderia me explicar por gentileza? grato.

1 resposta

A função sort, utiliza dos valores -1, 1 e 0 para determinar a posição do item no array, por exemplo:

const array = [5,3,7,2,8,8];

Quando realizamos .sort((a,b)=>{<seu código>}), a função faz a seguinte leitura em loop:

a = 5; b = 3; 
a < b ? não portanto, return 1. 

Ou seja, o valor 'a' ficara depois do valor 'b'. Na volta seguinte, a = 3 e b = 7, sendo assim, a < b é verdadeiro e o return é -1, o valor 'a' fica antes do valor 'b'. E caso eles sejam iguais como no final onde a=8 e b=8, return 0, as posições não se alteram.

(a[propriedade] < b[propriedade]) é o mesmo que: a: {nome: 'Amye'...} < b{nome: 'Oralle'...}

É quase isso, não sei como esta o seu objeto clientes, mas vou fazer um exemplo:

const clientes = [{ nome: 'joao', idade: 15},{nome: 'israel', idade: 25},{nome: 'rodrigo', idade: 27}]

Então chamamos a sua função ordenar(clientes, "nome"), estamos indicando para o 'sort' que o valor a ser verificado é o atributo 'nome' dos objetos 'clientes'. Portanto, ele irá comparar os valores 'joao', 'israel' e 'rodrigo' retornando uma lista em ordem alfabética