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..

25
demandé sur jordanhill123 2013-07-16 23:03:47

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
}];
64
répondu Rocket Hazmat 2013-07-16 19:37:33

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
  }
}
3
répondu Vyacheslav Cotruta 2018-06-17 11:34:53

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]);
}
1
répondu Katana314 2013-07-16 19:42:36
if(JSON.stringify(Object.keys(pcOrGroup).sort()) === JSON.stringify(Object.keys(orGroup)).sort())
{
    return true;
}
-3
répondu user4081130 2014-09-25 21:28:38