J'aimerais créer une fonction (non anonyme) qui trie un tableau d'objets par ordre alphabétique à l'aide de la clé name
. Je ne code que du code JavaScript direct afin que les frameworks ne m'aident pas le moins du monde.
var people = [
{'name': 'a75', 'item1': false, 'item2': false},
{'name': 'z32', 'item1': true, 'item2': false},
{'name': 'e77', 'item1': false, 'item2': false}
];
Que dis-tu de ça?
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');
Cela vous permet de spécifier la clé selon laquelle vous souhaitez trier le tableau afin de ne pas vous limiter à un tri de nom codé en dur. Cela fonctionnera pour trier n'importe quel tableau d'objets partageant la propriété qui est utilisée comme clé. Je crois que c'est ce que tu cherchais?
Et voici un jsFiddle: http://jsfiddle.net/6Dgbu/
Vous pouvez trier un tableau ([...]
) avec la fonction .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
});
Ce n'est pas une question JSON, en soi. C'est une question de tableau javascript.
Essaye ça:
people.sort(function(a,b){
var x = a.name < b.name? -1:1;
return x;
});
J'ai modifié la réponse de @Geuis en utilisant lambda et le converti en majuscule en premier:
people.sort((a, b) => a.toLocaleUpperCase() < b.toLocaleUpperCase() ? -1 : 1);
var data = [ 1, 2, 5, 3, 1];
data.sort(function(a,b) { return a-b });
Avec un petit compartiment et en utilisant le tri, nous pouvons le faire
Ma solution pour un problème de tri similaire avec 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]);
}
Array.prototype.sort_by = function(key_func, reverse=false){
return this.sort( (a, b) => ( key_func(b) - key_func(a) ) * (reverse ? 1 : -1) )
}
Alors par exemple si nous avons
var arr = [ {id: 0, balls: {red: 8, blue: 10}},
{id: 2, balls: {red: 6 , blue: 11}},
{id: 1, balls: {red: 4 , blue: 15}} ]
arr.sort_by(el => el.id, reverse=true)
/* would result in
[ { id: 2, balls: {red: 6 , blue: 11 }},
{ id: 1, balls: {red: 4 , blue: 15 }},
{ id: 0, balls: {red: 8 , blue: 10 }} ]
*/
ou
arr.sort_by(el => el.balls.red + el.balls.blue)
/* would result in
[ { id: 2, balls: {red: 6 , blue: 11 }}, // red + blue= 17
{ id: 0, balls: {red: 8 , blue: 10 }}, // red + blue= 18
{ id: 1, balls: {red: 4 , blue: 15 }} ] // red + blue= 19
*/