Matrizes de classificação JavaScript
Classificando uma matriz
O sort()
método classifica um array em ordem alfabética:
Exemplo
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
Revertendo uma matriz
O reverse()
método inverte os elementos em uma matriz.
Você pode usá-lo para classificar uma matriz em ordem decrescente:
Exemplo
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
fruits.reverse();
Classificação numérica
Por padrão, a sort()
função classifica os valores como strings .
Isso funciona bem para strings ("Apple" vem antes de "Banana").
No entanto, se os números são classificados como strings, "25" é maior que "100", porque "2" é maior que "1".
Por causa disso, o sort()
método produzirá um resultado incorreto ao classificar os números.
Você pode corrigir isso fornecendo uma função de comparação :
Exemplo
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
Use o mesmo truque para classificar uma matriz decrescente:
Exemplo
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
A função de comparação
O objetivo da função de comparação é definir uma ordem de classificação alternativa.
A função de comparação deve retornar um valor negativo, zero ou positivo, dependendo dos argumentos:
function(a, b){return a - b}
Quando a sort()
função compara dois valores, ela envia os valores para a função de comparação e classifica os valores de acordo com o valor retornado (negativo, zero, positivo).
Se o resultado for negativo a
é classificado antes
b
de .
Se o resultado for positivo b
é classificado antes a
de .
Se o resultado for 0, nenhuma alteração será feita com a ordem de classificação dos dois valores.
Exemplo:
A função compare compara todos os valores na matriz, dois valores por vez (a, b)
.
Ao comparar 40 e 100, o sort()
método chama a função de comparação(40, 100).
A função calcula 40 - 100 (a - b)
e, como o resultado é negativo (-60), a função de classificação classificará 40 como um valor menor que 100.
Você pode usar este snippet de código para experimentar a classificação numérica e alfabética:
<button onclick="myFunction1()">Sort Alphabetically</button>
<button
onclick="myFunction2()">Sort Numerically</button>
<p id="demo"></p>
<script>
const points = [40, 100, 1, 5, 25, 10];
document.getElementById("demo").innerHTML = points;
function
myFunction1() {
points.sort();
document.getElementById("demo").innerHTML
= points;
}
function myFunction2() {
points.sort(function(a, b){return
a - b});
document.getElementById("demo").innerHTML = points;
}
</script>
Classificando uma matriz em ordem aleatória
Exemplo
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return 0.5 - Math.random()});
O Método Fisher Yates
O exemplo acima, array .sort(), não é preciso, ele favorecerá alguns números em detrimento de outros.
O método correto mais popular é chamado de Fisher Yates shuffle e foi introduzido na ciência de dados já em 1938!
Em JavaScript, o método pode ser traduzido para isso:
Exemplo
const points = [40, 100, 1, 5, 25, 10];
for (let i = points.length -1; i > 0;
i--) {
let j = Math.floor(Math.random() * i)
let k = points[i]
points[i] = points[j]
points[j] = k
}
Encontre o valor de matriz mais alto (ou mais baixo)
Não há funções internas para encontrar o valor máximo ou mínimo em uma matriz.
No entanto, depois de classificar uma matriz, você pode usar o índice para obter os valores mais altos e mais baixos.
Ordenação crescente:
Exemplo
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
// now points[0] contains the lowest value
// and points[points.length-1] contains the highest value
Ordenação decrescente:
Exemplo
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
// now points[0] contains the highest value
// and points[points.length-1] contains the lowest value
Classificar uma matriz inteira é um método muito ineficiente se você deseja encontrar apenas o valor mais alto (ou mais baixo).
Usando Math.max() em um Array
Você pode usar Math.max.apply
para encontrar o número mais alto em uma matriz:
Exemplo
function myArrayMax(arr) {
return Math.max.apply(null, arr);
}
Math.max.apply(null, [1, 2, 3])
é equivalente a Math.max(1, 2, 3)
.
Usando Math.min() em um Array
Você pode usar Math.min.apply
para encontrar o menor número em uma matriz:
Exemplo
function myArrayMin(arr) {
return Math.min.apply(null, arr);
}
Math.min.apply(null, [1, 2, 3])
é equivalente a Math.min(1, 2, 3)
.
Meus métodos JavaScript Mín./Máx.
A solução mais rápida é usar um método "feito em casa".
Esta função percorre um array comparando cada valor com o valor mais alto encontrado:
Exemplo (Localizar Max)
function myArrayMax(arr) {
let len = arr.length;
let max = -Infinity;
while (len--) {
if (arr[len] > max) {
max = arr[len];
}
}
return max;
}
Esta função percorre um array comparando cada valor com o valor mais baixo encontrado:
Exemplo (Encontrar Min)
function myArrayMin(arr) {
let len = arr.length;
let min = Infinity;
while (len--) {
if (arr[len] < min) {
min = arr[len];
}
}
return min;
}
Classificando Matrizes de Objetos
Matrizes JavaScript geralmente contêm objetos:
Exemplo
const cars = [
{type:"Volvo", year:2016},
{type:"Saab", year:2001},
{type:"BMW", year:2010}
];
Mesmo que os objetos tenham propriedades de tipos de dados diferentes, o sort()
método pode ser usado para classificar a matriz.
A solução é escrever uma função de comparação para comparar os valores da propriedade:
Exemplo
cars.sort(function(a, b){return a.year - b.year});
Comparar propriedades de string é um pouco mais complexo:
Exemplo
cars.sort(function(a, b){
let x = a.type.toLowerCase();
let y = b.type.toLowerCase();
if (x < y) {return -1;}
if (x > y) {return 1;}
return 0;
});
Referência de matriz completa
Para uma referência completa do Array, acesse nosso:
Referência Completa de Matriz JavaScript .
A referência contém descrições e exemplos de todas as propriedades e métodos de Array.