Como classificar matrizes JavaScript: um guia

Foto de Mick Haupt no Unsplash

A classificação de matrizes deve ser simples, certo? Se eu tiver uma matriz de strings, quero classificá-la em ordem alfabética ['maçã', 'banana', 'pepino' ...]. Se eu tiver uma matriz de números, quero 1,2,3 ... e assim por diante. Embora classificar strings em um array seja simples, fica um pouco mais confuso depois disso. Vamos examinar a classificação de uma matriz em ordem alfabética e, em seguida, mergulhar na classificação numericamente e em algumas das pegadinhas que você pode encontrar.

Classificando Alfabeticamente

Digamos que temos essa matriz com os nomes de alguns produtos. Para classificar uma matriz em ordem alfabética, é muito simples. Basta adicionar sort () e seu array será atualizado magicamente.

let myArray = ['banana', 'cucumber', 'apple']
myArray.sort();
console.log(myArray); // ['apple', 'banana', 'cucumber']

myArray.sort().reverse();
console.log(myArray); // ['cucumber', 'banana', 'apple']

Classificando Numericamente

Portanto, em nosso primeiro exemplo, pudemos chamar o método de classificação sem parâmetros porque estávamos comparando strings. Para comparar o número, precisaremos passar uma função de retorno de chamada que nos permitirá manipular parte da lógica de classificação.

O caminho errado

Para ilustrar por que precisamos de uma função de retorno de chamada, vamos tentar classificar primeiro sem ela.

De volta ao código, vamos criar outro array, mas preenchido com números. Vamos usar o sort () que usamos no último exemplo e ver o que acontece.

let myNumberArray = [2,3,1];
myNumberArray.sort() // (WRONG WAY)
console.log(myNumberArray) // [1,2,3] (WE GOT LUCKY)

let myNumberArray = [200,23,12];
myNumberArray.sort(); (STILL WRONG WAY)
console.log(myNumberArray) // [12, 200, 23] (WRONG)

O Caminho Certo

Vamos tentar novamente, mas desta vez passaremos uma função de retorno de chamada para a função de classificação para obter os números classificados corretamente. Agora vamos passar aquela função de retorno de chamada que mencionei anteriormente. Primeiro, vou fazer de forma detalhada e, em seguida, mostrarei uma maneira de condensá-lo em uma linha de código.

function sortNumbers(number1, number2){
   return number1 - number2;
}
let myNumberArray = [200,23,12];
myNumberArray.sort(sortNumbers);
console.log(myNumberArray) // [12, 23, 200] (CORRECT)

Quando a função de classificação obtém um valor positivo, ela troca os dois elementos, empurrando o valor maior para o final da matriz. Portanto, neste caso, a função de classificação fará 200 - 23, o que resultará em -177. Como o valor é negativo, o 200 será movido para cima em um índice e o 23 será movido para baixo . Há alguma otimização dentro da função de classificação, mas você pode assumir que o método de classificação comparará todos os elementos necessários para movê-los para cima ou para baixo no array até que seja classificado. Que legal!

Voltando ao código, algo que você pode ver no StackOverflow ou mesmo nos documentos oficiais é isso. Embora muitos de vocês conheçam as funções das setas do ES6, este código pode ser um pouco intimidante para novos programadores.

myNumberArray.sort((a, b) => a - b)

function sortNumbers(a, b){
   return a - b;
}
myNumberArray.sort(sortNumbers);

const sortNumbers = (a,b) => {
   return a - b
}
myNumberArray.sort(sortNumbers);

myNumberArray.sort((a,b) => a - b)); // This uses the implicit return.

Conclusão

Há um milhão de casos mais complexos para classificação de JavaScript que eu poderia examinar (como classificar por um campo e depois por outro campo, ou seja, primeiro pelo sobrenome e depois pelo nome), ou classificação por uma propriedade de objeto aninhado, mas este artigo já está longo O suficiente. Recomendo que você dê uma olhada e use esses exemplos de código como um modelo para criar funções de classificação mais complexas.

Espero que tenha gostado deste artigo. Por favor, me siga e deixe algumas palmas se quiser ver mais posts como este. Sinta-se à vontade para entrar em contato com qualquer dúvida, tenha uma ótima semana de programação!

Mais conteúdo em plainenglish.io

Suggested posts

Encontrar informações sobre nomes de domínio

Um trecho de Small, Sharp Software Tools por Brian P. Hogan

Encontrar informações sobre nomes de domínio

Quando você faz uma solicitação para facebook.com, seu computador procura o nome de domínio para traduzir esse nome de domínio em um endereço IP para que seu computador possa fazer essa conexão.

Como eu me transferi de matemática para CS

Como eu me transferi de matemática para CS

O processo de admissão do outono de 2023 está chegando ao fim e os adiamentos/rejeições estão acontecendo. Parabéns se você foi aceito no programa dos seus sonhos na UW.

Related posts

Dois anos em design - O bom, o mau e o feio…

Dois anos em design - O bom, o mau e o feio…

“Ei, Siri, toque Me Dive, de Olivia Dean.” Era maio de 2021 quando comecei meu estágio na Future Academy Africa em Akure, Nigéria.

O que você pode fazer em sua temporada de espera (esperando para conseguir seu primeiro emprego em tecnologia)

O que você pode fazer em sua temporada de espera (esperando para conseguir seu primeiro emprego em tecnologia)

Mudar para uma nova carreira pode ser extremamente desafiador se você tentar fazer isso sozinho. É importante encontrar parceiros de responsabilidade que estejam no mesmo nível de aprendizado que você, que compartilhem objetivos, tenacidade e motivação semelhantes.

Aprender na semana de trabalho é mais importante do que você pensa

Aprender na semana de trabalho é mais importante do que você pensa

Muitas vezes nos encontramos lutando para implementar o que sabemos que é bom para nós. Desde dizer a um outro significativo que o amamos até lembrar de falar como um pirata, sempre haverá quem afirme que um dia, semana ou mês de eventos não é necessário porque eles já estão fazendo essas coisas.

Criando um ambiente de trabalho seguro

Criando um ambiente de trabalho seguro

“Ele vai me proteger quando eu estiver em perigo. Ele me esconderá em sua tenda.