Подтвердить что ты не робот

Сортировать json-объект в javascript

Например, с этим кодом:

var json = {
    "user1" : {
        "id" : 3
    },
    "user2" : {
        "id" : 6
    },
    "user3" : {
        "id" : 1
    }
}

Как я могу отсортировать этот json таким образом -

var json = {
    "user3" : {
        "id" : 1
    },
    "user1" : {
        "id" : 3
    },
    "user2" : {
        "id" : 6
    }
}

Я отсортировал пользователей с идентификаторами.

Я не знаю, как это сделать в javascript..

4b9b3361

Ответ 1

Во-первых, это не JSON. Это объект-объект JavaScript. JSON представляет собой строковое представление данных, которое просто так сильно напоминает синтаксис JavaScript.

Во-вторых, у вас есть объект. Они несортированы. Порядок элементов не может быть гарантирован. Если вы хотите получить гарантированный заказ, вам нужно использовать массив. Это потребует изменения структуры данных.

Один из вариантов может заключаться в том, чтобы ваши данные выглядели следующим образом:

var json = [{
    "name": "user1",
    "id": 3
}, {
    "name": "user2",
    "id": 6
}, {
    "name": "user3",
    "id": 1
}];

Теперь у вас есть массив объектов, и мы можем сортировать его.

json.sort(function(a, b){
    return a.id - b.id;
});

Результирующий массив будет выглядеть так:

[{
    "name": "user3",
    "id" : 1
}, {
    "name": "user1",
    "id" : 3
}, {
    "name": "user2",
    "id" : 6
}];

Ответ 2

В некотором роде ваш вопрос кажется очень законным, но я все же могу обозначить его как XY problem. Я предполагаю, что конечный результат заключается в том, что вы хотите каким-то образом отобразить отсортированные значения? Как сказал Берги в комментариях, вы никогда не сможете полностью полагаться на объекты Javascript ({i_am: "an_object"}), чтобы показать их свойства в любом конкретном порядке.

Для порядка отображения я могу предложить вам взять каждую клавишу объекта (т.е. i_am) и отсортировать их в упорядоченном массиве. Затем используйте этот массив при извлечении элементов вашего объекта для отображения. Псевдокод:

var keys = [...]
var sortedKeys = [...]
for (var i = 0; i < sortedKeys.length; i++) {
  var key = sortedKeys[i];
  addObjectToTable(json[key]);
}

Ответ 3

Вот простой фрагмент, который сортирует javascript-представление Json.

JSON.sort = function(o) {
    const isObject = (v) => ('[object Object]' === Object.prototype.toString.call(v));

    if (Array.isArray(o)) {
        return o.sort().map(v => isObject(v) ? JSON.sort(v) : v);
    } else if (isObject(o)) {
        return Object
            .keys(o)
            .sort()
            .reduce((a, k) => {
                if (isObject(o[k])) {
                    a[k] = JSON.sort(o[k]);
                } else if (Array.isArray(o[k])) {
                    a[k] = o[k].map(v => isObject(v) ? JSON.sort(v) : v);
                } else {
                    a[k] = o[k];
                }

                return a;
            }, {});
    }

    return o;
}

Его можно использовать следующим образом:

JSON.sort({
    c: {
        c3: null,
        c1: undefined,
        c2: [3, 2, 1, 0],
    },
    a: 0,
    b: 'Fun'
});

Это будет выводить:

{
  a: 0,
  b: 'Fun',
  c: {
    c2: [3, 2, 1, 0],
    c3: null
  }
}

Ответ 4

if(JSON.stringify(Object.keys(pcOrGroup).sort()) === JSON.stringify(Object.keys(orGroup)).sort())
{
    return true;
}