2
respostas

[Dúvida] Sobre as propriedades da arrow fuction

esse é o código todo da aula:

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

function ordenar (lista, propriedade){
    // sort                 ordenar
    const resultado = lista.sort((a, b) =>{
        if (a[propriedade] < b[propriedade]){
            return -1;
        }

        if (a[propriedade] > b[propriedade]){
            return 1;
        }
        return 0;
    });
    return resultado;
}
//                           json       chave: nome
const ordenadoNome = ordenar(clientes, 'nome');

console.log(ordenadoNome)

A parte na qual fiquei confuso foi na declarações desses trechos:

    const resultado = lista.sort((a, b) =>{
        if (a[propriedade] < b[propriedade]){
            return -1;
        }

        if (a[propriedade] > b[propriedade]){
            return 1;
        }
        return 0;
    });
    return resultado;

Não entendi muito bem os parâmetros "(a, b)" e o fato de retornar -1 ou 1 se o if for atendido, se alguém poder me da uma explicação me dizendo o que os parâmetros estão se referindo da forma literal e pq soma e diminui fiquei grato e me ajudará muito.

2 respostas

Minha dúvida não é a mesma do Juan, mas vou pegar um gancho na pergunta dele. Quando usamos o método .sort((a, b)), na prática, estamos comparando todos os elementos do array entre si, um a um?!

Vou organizar os pontos perguntados em alguns itens:

parametros (a, b)

a nomenclatura dos parametros é livre, usar 'a' e 'b' é bem comum assim como 'first' e 'second' ou mesmo algo mais relacionado ao tipo em questão, depende um pouco das preferencias de quem está desenvolvendo e das convensões do projeto

retorno 1 e -1 (e 0)

o método sort é aplicável para listas de qualquer tipo, é um algoritimo genérico, mas ele precisa saber se um elemento é maior ou igual a outro, e é por isso que essa função é necessária. Sempre que o algortimo precisar saber sobre dois itens durante a ordenação, ele chama a função, e com base no retorno convensionado de 1 ('a' é maior que 'b'), -1 ('b' é maior que 'a') ou 0 (são iguais), ele decide como esses dois objetos serão posicionados corretamente. Aqui eu acredito que eu tenha respondido o Joni também, porque em geral, o algoritmo de ordenação que irá decidir como chamar essa função passada no sort, pode haver alguma otimização ou regra aplicada, depende de olhar a documentação pra saber exatamente o comportamento. Uma boa referencia pra isso são as docs da mozilla: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

curiosidade: os valores 1 e -1 também são convensões, o algoritimo, olhando a doc, valida 0, maior e menor que 0, então é possível retornar 10 e -30, por exemplo, de modo arbitrário, que irá funcionar.