Função simples para classificar uma matriz de objects

Eu gostaria de criar uma function (não anônima) que classifica uma matriz de objects em ordem alfabética pelo name da chave. Eu codifico apenas JavaScript direto para que frameworks não me ajudem nem um pouco.

 var people = [ {'name': 'a75', 'item1': false, 'item2': false}, {'name': 'z32', 'item1': true, 'item2': false}, {'name': 'e77', 'item1': false, 'item2': false} ]; 

Que tal agora?

 var people = [ { name: 'a75', item1: false, item2: false }, { name: 'z32', item1: true, item2: false }, { name: 'e77', item1: false, item2: false }]; function sortByKey(array, key) { return array.sort(function(a, b) { var x = a[key]; var y = b[key]; return ((x < y) ? -1 : ((x > y) ? 1 : 0)); }); } people = sortByKey(people, 'name'); 

Isso permite que você especifique a chave pela qual você deseja classificar a matriz para que você não esteja limitado a uma sorting de nome codificado. Ele funcionará para classificar qualquer array de objects que compartilham a propriedade que é usada como chave. Eu acredito que é isso que você estava procurando?

E aqui está um jsFiddle: http://jsfiddle.net/6Dgbu/

Você pode classificar uma matriz ( [...] ) com a function .sort :

 var people = [ {'name': 'a75', 'item1': false, 'item2': false}, {'name': 'z32', 'item1': true, 'item2': false}, {'name': 'e77', 'item1': false, 'item2': false}, ]; var sorted = people.sort(function IHaveAName(a, b) { // non-anonymous as you ordered... return b.name < a.name ? 1 // if b should come earlier, push a to end : b.name > a.name ? -1 // if b should come later, push a to begin : 0; // a and b are equal }); 

Esta não é uma questão JSON, por si só. É uma questão de matriz javascript.

Tente isto:

 people.sort(function(a,b){ var x = a.name < b.name? -1:1; return x; }); 

var data = [ 1, 2, 5, 3, 1]; data.sort(function(a,b) { return ab });

Com um pequeno compartimento e usando o tipo, podemos fazer isso

Minha solução para problema de sorting semelhante usando o ECMA 6

 var library = [ {name: 'Steve', course:'WAP', courseID: 'cs452'}, {name: 'Rakesh', course:'WAA', courseID: 'cs545'}, {name: 'Asad', course:'SWE', courseID: 'cs542'}, ]; const sorted_by_name = library.sort( (a,b) => a.name > b.name ); for(let k in sorted_by_name){ console.log(sorted_by_name[k]); } 

Eu modifiquei a resposta da @Geuis usando lambda e converti-a em maiúscula primeiro:

 people.sort((a, b) => a.toLocaleUpperCase() < b.toLocaleUpperCase() ? -1 : 1); 
 var library = [ {name: 'Steve', course:'WAP', courseID: 'cs452'}, {name: 'Rakesh', course:'WAA', courseID: 'cs545'}, {name: 'Asad', course:'SWE', courseID: 'cs542'}, ]; const sorted_by_name = library.sort( (a,b) => a.name > b.name ); for(let k in sorted_by_name){ console.log(sorted_by_name[k]); } 
 var people = [{"name": 'a75',"item1": "false","item2":"false"}, {"name": 'z32',"item1": "true","item2": "false"}, {"name": 'e77',"item1": "false","item2": "false"}]; function mycomparator(a,b) { return parseInt(a.name) - parseInt(b.name); } people.sort(mycomparator); 

algo ao longo das linhas deste talvez (ou como costumávamos dizer, isso deve funcionar).