Array sort ()

O método JavaScript Array sort () classifica os itens de um array.

O sort()método classifica os elementos de uma determinada matriz em uma ordem crescente ou decrescente específica.

A sintaxe do sort()método é:

 arr.sort(compareFunction)

Aqui, arr é um array.

Parâmetros sort ()

O sort()método inclui:

  • compareFunction (opcional) - É usado para definir uma ordem de classificação personalizada.

Valor de retorno de sort ()

  • Retorna a matriz após classificar os elementos da matriz no local (o que significa que ele altera a matriz original e nenhuma cópia é feita).

Exemplo 1: Classificando os Elementos de uma Matriz

Quando compareFunction não é passado,

  • Todos os undefinedelementos que não são da matriz são primeiro convertidos em strings.
  • Essas strings são então comparadas usando seu valor de ponto de código UTF-16.
  • A classificação é feita em ordem crescente.
  • Todos os undefinedelementos são classificados até o final da matriz.
 // sorting an array of strings var names = ("Adam", "Jeffrey", "Fabiano", "Danil", "Ben"); // returns the sorted array console.log(names.sort()); // modifies the array in place console.log(names); var priceList = (1000, 50, 2, 7, 14); priceList.sort(); // Number is converted to string and sorted console.log(priceList)

Resultado

 ('Adam', 'Ben', 'Danil', 'Fabiano', 'Jeffrey') ('Adam', 'Ben', 'Danil', 'Fabiano', 'Jeffrey') (1000, 14, 2, 50 , 7)

Aqui, podemos ver que a matriz de nomes é classificada em ordem crescente da string. Por exemplo, Adam vem antes de Danil porque "A" vem antes de "D".

Como todos os elementos não indefinidos são convertidos em strings antes de classificá-los, os Numbertipos de dados são classificados nessa ordem.

Aqui, podemos ver que, embora 1000 seja maior que 50 numericamente, ele vem no início da lista classificada. É porque "1" <"5" .

Exemplo 2: classificação usando função personalizada

Quando compareFunction é passado,

  • Todos os undefinedelementos que não são da matriz são classificados de acordo com o valor de retorno de compareFunction.
  • Todos os elementos indefinidos são classificados no final da matriz e compareFunction não é chamado para eles.

Suponha que desejamos classificar a matriz de nomes acima de forma que o nome mais longo venha por último, em vez de classificá-lo em ordem alfabética. Podemos fazer isso da seguinte maneira:

 // custom sorting an array of strings var names = ("Adam", "Jeffrey", "Fabiano", "Danil", "Ben"); function len_compare(a, b)( return a.length - b.length; ) // sort according to string length names.sort(len_compare); console.log(names);

Resultado

 ('Ben', 'Adam', 'Danil', 'Jeffrey', 'Fabiano')

Aqui, a classificação é baseada na lógica a.length - b.length. Basicamente, significa que o item com comprimento menor aparecerá no início do Array.

Vamos primeiro entender como compareFunctionfunciona o opcional .

Qualquer compareFunctiontem a seguinte sintaxe:

 function (a, b)( // sorting logic // return a Number )

O sort()método compara todos os valores da matriz passando dois valores por vez para o compareFunction. Os dois parâmetros aeb representam esses dois valores, respectivamente.

O compareFunctiondeve retornar a Number. Este valor retornado é usado para classificar os elementos da seguinte maneira:

  • Se o valor retornado <0 , a é classificado antes de b (a vem antes de b).
  • Se o valor retornado> 0 , b é classificado antes de a (b vem antes de a).
  • Se o valor retornado == 0 , aeb permanecem inalterados em relação um ao outro.

No Exemplo 2, classificamos a matriz usando:

 function len_compare(a, b)( return a.length - b.length; )

Aqui:

  • Se a.length - b.length <0 , a vem antes de b. Por exemplo, "Adam" vem antes de "Jeffrey" como 4 - 7 <0 .
  • Se a.length - b.length> 0 , b vem antes de a. Por exemplo, "Danil" vem depois de "Ben" como 5 - 3> 0.
  • Se a.length - b.length == 0 , sua posição permanece inalterada. Por exemplo, a posição relativa de "Jeffrey" e "Fabiano" permanece inalterada porque 7 - 7 == 0 .

Podemos ver que isso resulta na classificação das cordas de acordo com seu comprimento em ordem crescente.

Exemplo 3: Classificando Números Numericamente

Como todos os elementos não indefinidos são convertidos em strings antes de classificá-los, não podemos classificar os números usando seu valor numérico por padrão.

Vamos ver como podemos implementar isso usando uma função personalizada.

 // numeric sorting // define array var priceList = (1000, 50, 2, 7, 14); // sort() using function expression // ascending order priceList.sort(function (a, b) ( return a - b; )); // Output: Ascending - 2,7,14,50,1000 console.log("Ascending - " + priceList); // sort() using arrow function expression // descending order priceList.sort((a, b) => b - a); // Output: Descending - 1000,50,14,7,2 console.log("Descending - " + priceList);

Resultado

 Ascendente - 2,7,14,50,1000 Descendente - 1000,50,14,7,2

Neste exemplo, classificamos a matriz usando:

 function (a, b) ( return a - b; )

Aqui,

  • Se a - b <0 , a vem antes de b. Por exemplo, 2 vem antes de 7 como 2 - 7 <0 .
  • Se a - b> 0 , b vem antes de a. Por exemplo, 1000 vem depois de 50 como 1000 - 50> 0.

Podemos ver que isso resulta na classificação dos números de acordo com seu valor numérico crescente.

Da mesma forma, podemos usar b - apara classificá-los em ordem decrescente. Observe que também podemos usar a expressão da função de seta definida no ES2015.

Também podemos reverter (ordem decrescente) a matriz classificada usando o reverse()método de matriz embutido . Para saber mais, visite JavaScript Array reverse ().

Artigos interessantes...