JavaScript classificar por dois campos

Este foi um pequeno problema que encontrei recentemente e a solução que encontrei foi tão brilhante que achei que valia a pena compartilhar aqui.

Então, o problema era que eu tinha uma matriz como esta:

var obj = [
{
"one": 1,
"two": 9
}, {
"one": 3,
"two": 5
}, {
"one": 1,
"two": 2
}
];

e eu queria classificá-lo por “um” e depois por “dois” para obter um resultado como este:

var obj = [
{
"one": 1,
"two": 2,
}, {
"one": 1,
"two": 9
}, {
"one": 3,
"two": 5
}
];

Parece simples, certo? Eu também pensei, mas o algoritmo de classificação que o navegador está usando limita suas opções quando se trata de classificar por vários campos. Depois de pesquisar um pouco, descobri esta solução maravilhosa: http://stackoverflow.com/questions/13211709/javascript-sort-array-by-multiple-number-fields

obj.sort(function(a, b) {
return a["one"] - b["one"] || a["two"] - b["two"];
});

Isso classificará seu array por “um” e se eles forem iguais (ou seja, 0), ele classificará por “dois”. É simples, conciso, legível e o melhor de tudo – funciona perfeitamente.