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!