Плагин API и сортировка в json ответе

Привет всем, использую плагин API и столкнулся с необычной проблемой: с помощью модуля Topic получаю список топиков в json, структура ответа упрощенно такая:

    collection: {
        3: { ... },
        2: { ... },
        1: { ... }
    }

Где ключи объекта collection — это id топиков, но у браузера Chrome есть одна особенность — он сортирует вложенные объекты по ключу от меньшего к большему, таким образом на клиенте я получаю следующий объект, и получаю неправильную сортировку топиков :

    collection: {
        1: { ... },
        2: { ... },
        3: { ... }
    }

Я могу дополнительно сортировать топики на клиенте, но хотелось бы обойтись без дополнительной обработки, и вот вопрос, как сделать, чтобы плагин возвращал collection, который будет не объектом, а массивом (у массива Chrome сохранит исходную сортировку), или может быть кто-нибудь предложит альтернативное решение?

6 комментариев

avatar
Проблема достаточно известная, есть даже issue для v8.
На данный момент решается небольшим хаком. Id топиков должны быть не числовым значением, а строкой:
collection: {
        "topic_3": { ... },
        "topic_2": { ... },
        "topic_1": { ... }
}

Или более миниатюрный вариант:
collection: {
        "_3": { ... },
        "_2": { ... },
        "_1": { ... }
}
avatar
Т.е необходимо изменить формат ответа на запрос к апи, там где они формируются(на "_$k")
avatar
спасибо, но к сожалению, хром сортирует даже такие ключи
avatar
Не может такого быть. Вы уверены что данные отдаются уже упорядоченные? Например новые топики всегда будут возвращаются по возрастанию.
avatar
Я же провел тесты перед ответом:
var list = {3: "Audi", 2: "BMW", 1: "Chevrolet"};
-> undefined
for (var i in list) {
  console.log(list[i]);
}
Chevrolet
BMW
Audi
-> undefined
var list = {"_3": "Audi", "_2": "BMW", "_1": "Chevrolet"};
-> undefined
for (var i in list) {
  console.log(list[i]);
}
Audi
BMW
Chevrolet
-> undefined
avatar
Действительно, запустил тесты и все так, как вы и говорите, видимо, был не внимателен, когда менял ключи.
Спасибо
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.