Resumo : neste tutorial, você aprenderá como usar o toSorted()
método JavaScript Array para retornar um novo array com elementos ordenados.
Introdução ao método JavaScript Array toSorted
O Array.prototype
possui o sort()
método que classifica os elementos em um array . No entanto, ele modifica o array original.
Às vezes, você não deseja alterar o array original, mas criar um novo com os elementos classificados. Neste caso, você pode usar o Array.prototype.toSorted()
método.
Aqui está a sintaxe básica do toSorted()
método:
array.toSorted(compareFn);
Linguagem de código: JavaScript ( javascript )
Nesta sintaxe:
array
: este é o array no qual você chama o método.compareFn
(Opcional): Esta é uma função que define a ordem de classificação. Se você omitir, o método toSorted() converterá os elementos do array em strings e os classificará de acordo com os valores de ponto de código Unicode de seus caracteres.
A compareFn
função aceita dois argumentos a
e b
quais são o primeiro e o segundo elementos para comparação.
Espera compareFn
-se que retorne um número negativo se a
for classificado antes b
, um número positivo se b
for classificado antes a
e zero se a ordem de a
e b
não importa.
A toSorted()
função retorna um novo array com elementos classificados em ordem crescente.
O toSorted()
método é genérico , o que significa que você pode chamá-lo em um objeto que não seja de array que possua a length
propriedade e propriedades com chave inteira.
Nesse caso, o toSorted()
método faz o seguinte:
- Primeiro, leia a
length
propriedade do objeto. - Segundo, colete todas as propriedades existentes com chave inteira no intervalo de
0
tolength - 1
. - Terceiro, classifique os elementos.
- Finalmente, escreva os elementos em um novo array.
Exemplos de métodos JavaScript Array toSorted
Vamos explorar alguns exemplos de uso do toSorted()
método JavaScript Array.
1) Usando o método toSorted() para retornar um novo array classificado de strings
O exemplo a seguir usa o toSorted()
método para classificar uma matriz de strings:
const colors = ['red','green','blue'];
const sortedColors = colors.toSorted();
console.log(colors);
console.log(sortedColors);
Linguagem de código: JavaScript ( javascript )
Saída:
['red', 'green', 'blue']
['blue', 'green', 'red']
Linguagem de código: JavaScript ( javascript )
A saída indica que o array original ( colors
) não muda, mas o array resultante ( sortedColors
) possui elementos classificados.
2) Usando o método toSorted() para retornar uma nova matriz ordenada de números
O exemplo a seguir usa o toSorted()
método para classificar uma matriz de números:
const scores = [3, 1, 2, 7, 9];
const sortedScores = scores.toSorted((a,b) => a - b);
console.log(scores);
console.log(sortedScores);
Linguagem de código: JavaScript ( javascript )
Saída:
[3, 1, 2, 7, 9]
[1, 2, 3, 7, 9]
Linguagem de código: JavaScript ( javascript )
Neste exemplo, usamos o compareFn
parâmetro que compara dois números para ordenar numericamente os elementos do scores
array em ordem crescente.
Para classificar os números em ordem decrescente, altere o compareFn
parâmetro da seguinte forma:
const scores = [3, 1, 2, 7, 9];
const sortedScores = scores.toSorted((a,b) => b - a);
console.log(scores);
console.log(sortedScores);
Linguagem de código: JavaScript ( javascript )
Saída:
[3, 1, 2, 7, 9]
[9, 7, 3, 2, 1]
Linguagem de código: JavaScript ( javascript )
Na compareFn
função, usamos b - a
para instruir a função que se b
for maior que a
, ela retorna um valor positivo, fazendo com que b
seja classificada antes a
.
Como resultado, o toSorted()
método classifica a matriz em ordem decrescente porque coloca os números maiores (valores mais altos de b
) antes dos números menores (valores mais baixos de a
).
3) Usando o método toSorted() para classificar um array de objetos por uma propriedade
O exemplo a seguir usa o toSorted()
método para classificar uma matriz de livros por ano de publicação sem modificar a matriz original:
// Original array of books
const books = [
{ title: 'The Great Gatsby', author: 'F. Scott Fitzgerald', year: 1925 },
{ title: 'To Kill a Mockingbird', author: 'Harper Lee', year: 1960 },
{ title: '1984', author: 'George Orwell', year: 1949 },
{ title: 'Brave New World', author: 'Aldous Huxley', year: 1932 }
];
// Creating a sorted copy based on the publication year using toSorted()
const sortedBooks = books.toSorted((a, b) => a.year - b.year);
// Output the sorted copy and the original array
console.log(sortedBooks);
Linguagem de código: JavaScript ( javascript )
Saída:
[
{ title: 'The Great Gatsby', author: 'F. Scott Fitzgerald', year: 1925},
{ title: 'Brave New World', author: 'Aldous Huxley', year: 1932 },
{ title: '1984', author: 'George Orwell', year: 1949 },
{ title: 'To Kill a Mockingbird', author: 'Harper Lee', year: 1960 }
]
Linguagem de código: JavaScript ( javascript )
4) Chamando o método toSorted() em objetos não array
O exemplo a seguir ilustra como chamar o toSorted()
método em um objeto que possui a length
propriedade e propriedades com chave inteira:
const arrayLike = {
length: 3,
unrelated: "foo",
0: 5,
2: 4,
3: 3, // ignored by toSorted() since length is 3
};
console.log(Array.prototype.toSorted.call(arrayLike));
// [4, 5, undefined]
Linguagem de código: JavaScript ( javascript )
5) Usando toSorted() em arrays esparsos
O exemplo a seguir chama o toSorted()
método em uma matriz esparsa. O toSorted()
método trata os slots vazios como se tivessem o valor undefined
:
const skills = ['JS',,'Node.js'];
const sortedSkills = skills.toSorted();
console.log(sortedSkills);
Linguagem de código: JavaScript ( javascript )
Saída:
['JS', 'Node.js', undefined]
Linguagem de código: JavaScript ( javascript )
Resumo
- Use o método JavaScript Array
toSorted()
para retornar um novo array cujos elementos são classificados sem modificar o array original. - O
toSorted()
método é genérico para que você possa chamá-lo em um objeto que não seja de array que possua alength
propriedade e propriedades com chave inteira. - Ao aplicar o
toSorted()
método a matrizes esparsas, ele itera através de slots vazios, tratando-os como se contivessem o valor indefinido.