Executando verificação de segurança...
2

Ordenando array de objetos com o sort() do JavaScript

O sort do JavaScript pode usar uma função callback para ordenar um array.

Veja neste exemplo como ordenar uma lista de jogadores de acordo com seus pontos de forma crescente e decrescente usando o sort() do JavaScript:

const players = [
  { name: 'Rodrigo', kills: 12 }, 
  { name: 'Vitor', kills: 9 }, 
  { name: 'Camila', kills: 17 }, 
  { name: 'Amanda', kills: 6 }
];

const orderAsc = (a, b) => a.kills - b.kills;
const orderDesc = (a, b) => b.kills - a.kills;

console.log(players.sort(orderAsc));
console.log(players.sort(orderDesc));

Até a próxima dica :)

Carregando publicação patrocinada...
1

Apenas acrescentando que a operação de sort do javascript altera o array original.
Então, por exemplo:

const players = [
  { name: 'Rodrigo', kills: 12 }, 
  { name: 'Vitor', kills: 9 }, 
  { name: 'Camila', kills: 17 }, 
  { name: 'Amanda', kills: 6 }
];

console.log(players);
console.log(players.sort((a, b) => a.kills - b.kills));
console.log(players);

você terá como retorno dos logs:

// linha 1:
[
  {
    "name": "Rodrigo",
    "kills": 12
  },
  {
    "name": "Vitor",
    "kills": 9
  },
  {
    "name": "Camila",
    "kills": 17
  },
  {
    "name": "Amanda",
    "kills": 6
  }
]

//linha 2:
[
  {
    "name": "Amanda",
    "kills": 6
  },
  {
    "name": "Vitor",
    "kills": 9
  },
  {
    "name": "Rodrigo",
    "kills": 12
  },
  {
    "name": "Camila",
    "kills": 17
  }
]

//linha 3:
[
  {
    "name": "Amanda",
    "kills": 6
  },
  {
    "name": "Vitor",
    "kills": 9
  },
  {
    "name": "Rodrigo",
    "kills": 12
  },
  {
    "name": "Camila",
    "kills": 17
  }
]

Perceba que na linha 3 o array original está ordenado.
Ou seja, se sua intenção não for a de mudar o array definitivamente, tome cuidado com o sort().

Uma solução simples é utilizar o operador de spread (...) do javascript. Com ele você vai ter uma cópia do array e poderá operar sobre ela sem alterar o conteúdo do array original.

Exemplo:

const players = [
  { name: 'Rodrigo', kills: 12 }, 
  { name: 'Vitor', kills: 9 }, 
  { name: 'Camila', kills: 17 }, 
  { name: 'Amanda', kills: 6 }
];

console.log([...players].sort((a, b) => a.kills - b.kills));
console.log(players);
    

Dessa vez você terá um array ordenado na primeira linha e o array original na segunda.
Isso é muito útil em casos onde você apenas quer mostrar o resultado ordenado por algum parâmetro na saída, mas ainda deseja fazer outras operações com o array original.

Inclusive, um cenário de erro muito comum é imaginar que os 2 arrays abaixo são diferentes:

const names = ['Lucas', 'Juca', 'Marcela'];
const names2 = names;
names2.push('Ana');

Se você der um log nos 2, verá que o nome "Ana" também apareceu no primeiro array.
Isso pq, novamente, você está operando sobre o mesmo array. O "=" apenas referenciou ele em uma outra constante, mas ainda é o mesmo objeto.

Novamente a solução é usar o spread:

const names = ['Lucas', 'Juca', 'Marcela'];
const names2 = [...names];
names2.push('Ana');

Agora sim, temos 2 arrays diferentes!