trier l'objet JSON en javascript
Par exemple avec ce code:
var json = {
"user1" : {
"id" : 3
},
"user2" : {
"id" : 6
},
"user3" : {
"id" : 1
}
}
Comment puis-je trier json comme cela -
var json = {
"user3" : {
"id" : 1
},
"user1" : {
"id" : 3
},
"user2" : {
"id" : 6
}
}
j'ai trié les utilisateurs avec les Id..
Je ne sais pas comment faire cela en javascript..
4 réponses
tout d'Abord, c'est JSON. C'est un objet JavaScript littéral. JSON is a représentation de chaîne de données, qui se trouvent très proches de la syntaxe JavaScript.
Deuxièmement, vous avez un objet. Ils ne sont pas triés. L'ordre des éléments ne peut être garantie. Si vous voulez une commande garantie, vous besoin pour utiliser un tableau. Cela vous obligera à modifier votre structure de données.
Une option pourrait être de faire vos données ressembler à ceci:
var json = [{
"name": "user1",
"id": 3
}, {
"name": "user2",
"id": 6
}, {
"name": "user3",
"id": 1
}];
Maintenant, vous avez un tableau d'objets, et nous pouvons faire le tri.
json.sort(function(a, b){
return a.id - b.id;
});
le tableau résultant ressemblera à:
[{
"name": "user3",
"id" : 1
}, {
"name": "user1",
"id" : 3
}, {
"name": "user2",
"id" : 6
}];
voici un simple extrait qui trie une représentation javascript d'un Json.
function isObject(v) {
return '[object Object]' === Object.prototype.toString.call(v);
};
JSON.sort = function(o) {
if (Array.isArray(o)) {
return o.sort().map(JSON.sort);
} else if (isObject(o)) {
return Object
.keys(o)
.sort()
.reduce(function(a, k) {
a[k] = JSON.sort(o[k]);
return a;
}, {});
}
return o;
}
Il peut être utilisé comme suit:
JSON.sort({
c: {
c3: null,
c1: undefined,
c2: [3, 2, 1, 0],
},
a: 0,
b: 'Fun'
});
Qui sera de sortie:
{
a: 0,
b: 'Fun',
c: {
c2: [3, 2, 1, 0],
c3: null
}
}
D'une certaine façon, votre question semble très légitime, mais je pourrais quand même l'étiqueter comme XY problem
. Je suppose que le résultat final est que vous voulez affichage les valeurs triées d'une façon ou d'une autre? Comme Bergi L'a dit dans les commentaires, vous ne pouvez jamais tout à fait appuyer sur sur les objets Javascript ( {i_am: "an_object"}
) pour afficher leurs propriétés dans un ordre particulier.
pour l'ordre d'affichage, je pourrais vous suggérer de prendre chaque touche de l'objet (i.e.,i_am
) et les trier dans un ordre tableau. Ensuite, utilisez ce tableau lorsque vous récupérez des éléments de votre objet à afficher. Pseudo:
var keys = [...]
var sortedKeys = [...]
for (var i = 0; i < sortedKeys.length; i++) {
var key = sortedKeys[i];
addObjectToTable(json[key]);
}
if(JSON.stringify(Object.keys(pcOrGroup).sort()) === JSON.stringify(Object.keys(orGroup)).sort())
{
return true;
}