Digamos que você tenha uma classe JavaScript como esta
var DepartmentFactory = function(data) {
this.id = data.Id;
this.name = data.DepartmentName;
this.active = data.Active;
}
Digamos que você crie várias instâncias dessa classe e as armazene em uma matriz
var objArray = [];
objArray.push(DepartmentFactory({Id: 1, DepartmentName: 'Marketing', Active: true}));
objArray.push(DepartmentFactory({Id: 2, DepartmentName: 'Sales', Active: true}));
objArray.push(DepartmentFactory({Id: 3, DepartmentName: 'Development', Active: true}));
objArray.push(DepartmentFactory({Id: 4, DepartmentName: 'Accounting', Active: true}));
Então agora eu teria uma matriz de objetos criados por DepartmentFactory
. Como eu usaria o array.sort()
método para classificar essa matriz de objetos pela DepartmentName
propriedade de cada objeto?
O array.sort()
método funciona bem ao classificar uma matriz de strings
var myarray=["Bob", "Bully", "Amy"];
myarray.sort(); //Array now becomes ["Amy", "Bob", "Bully"]
Mas como faço para funcionar com uma lista de objetos?
javascript
jdavis
fonte
fonte
DepartmentFactory
como construtor, crie seus objetos usandonew DepartmentFactory
, caso contrário, a matriz será preenchida com váriosundefined
valores.Respostas:
você teria que fazer algo assim:
nota: alterar o caso (para superior ou inferior) garante uma classificação que não diferencia maiúsculas de minúsculas.
fonte
return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;
Não vai editar a sua resposta, mantendo a esperança eu vou, pelo menos lembrar a coisa linting :)Para suportar unicode:
fonte
return a.DepartmentName.toLowerCase().localeCompare(b.DepartmentName.toLowerCase());
localeCompare
é legal e tem todo o suporte do navegador para o primeiro argumento. Não é ruim!localeCompare
é desviar o trabalho de gerenciar lógicas de classificação e peculiaridades de localidade para o sistema. Se fazer uma classificação sem distinção entre maiúsculas e minúsculas for normal para o código do idioma, como é feito em inglês, isso será feito para você:"Z" > 'a' // false
"Z".localeCompare('a') // 1
Se você desejar desviar-se do padrão do código do idioma, poderá enviar substituições nos parâmetroslocales
eoptions
: developer.mozilla. org / pt-BR / docs / Web / JavaScript / Referência /…demo: http://jsfiddle.net/diode/hdgeH/
fonte
fonte
DEMO
fonte
fonte
faça isso deste modo
fonte
Isso os classifica alfabeticamente E não diferencia maiúsculas de minúsculas. Também é super limpo e fácil de ler: D
fonte
Aqui está uma função simples que você pode usar para classificar a matriz de objetos através de suas propriedades; não importa se a propriedade é um tipo de sequência ou número inteiro, ela funcionará.
fonte
Você precisa passar uma função que aceita dois parâmetros, os compara e retorna um número, supondo que você queira classificá-los por ID, você escreveria ...
fonte
Depois de tentar um pouco sobre isso e tentar fazer menos ciclos possíveis, acabei com esta solução:
Demonstração no codepen
fonte
Uma resposta simples:
ES6 maneira:
Se você precisar torná-lo em minúsculas / maiúsculas, etc, faça isso e armazene o resultado em uma variável do que comparar essa variável. Exemplo:
fonte