Javascript Сортировка объекта пары значений ключа на основе значения - программирование
Подтвердить что ты не робот

Javascript Сортировка объекта пары значений ключа на основе значения

У меня есть объект, как показано ниже. Попытка переставить его в порядке возрастания в зависимости от значения. Подобно методу сортировки массива Javascript.

    var masterList = {
    "1": "google",
    "2": "yahoo",
    "3": "msn",
    "4": "stackoverflow",
    "5": "github",
    "6": "jsfiddle",
    "7": "amazon",
    "8": "ebay"
}

Пожалуйста, дайте мне знать лучшее решение...

4b9b3361

Ответ 1

Объекты JavaScript не имеют порядка. Несмотря на то, что большинство браузеров выполняют итерацию в том же порядке, свойства были созданы, нет гарантии, поэтому сортировка не поддерживается на объектах.

См. здесь для получения дополнительной информации: Выполняется ли заказ на объект свойств JavaScript гарантии?

Вам также может быть интересно, что Джон Ресиг должен сказать по этому вопросу.


Если вам нужен список сортировки, вам необходимо сохранить его как массив объектов:

var masterList = [
    { key: 1, val: "google" },
    { key: 2, val: "yahoo" },
    { key: 3, val: "msn" },
    { key: 4, val: "stackoverflow" },
    { key: 5, val: "github" },
    { key: 6, val: "jsfiddle" },
    { key: 7, val: "amazon" },
    { key: 8, val: "ebay" }
];

Затем, чтобы отсортировать их, просто используйте обычный метод sort:

masterList = masterList.sort(function (a, b) {
    return a.val.localeCompare( b.val );
});

Здесь скрипка: http://jsfiddle.net/ASrUD/

Ответ 2

    var obj = {
        "1": "google",
        "2": "yahoo",
        "3": "msn",
        "4": "stackoverflow",
        "5": "github",
        "6": "jsfiddle",
        "7": "amazon",
        "8": "ebay"
    };

    var arr = [];

    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            arr.push(obj[key]);
        }
    }
    
    alert(arr.sort());