Получен объект json encode со стороны сервера в php MONTHLY_FORMAT, прочитайте этот объект в jquery как
var MONTHLY_FORMAT = '<?php echo $MONTHLY_FORMAT; ?>';
Здесь в консоли получить вывод следующим образом:
{"01":"January","02":"February","03":"March","04":"April","05":"May","06":"June","07":"July ","08":"August","09":"September","10":"October","11":"November","12":"December"}
но после разбора JSON
var MONTHLY_FORMAT_PARSE = JSON.parse( MONTHLY_FORMAT );
вернуть вывод, как
{10: "October", 11: "November", 12: "December", 01: "January", 02: "February", 03: "March", 04: "April", 05: "May", …}
Как мне получить список объектов json месяца в правильной последовательности месяцев?
Проблема в том, что «число» на самом деле интерпретируется как строка... Я пытаюсь проанализировать его в PHP и получить тот же результат... Вы можете принудительно проанализировать ключ в PHP как int.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


пытаться:
const ordered = {};
Object.keys(MONTHLY_FORMAT_PARSE).sort().forEach(function(key) {
ordered[key] = MONTHLY_FORMAT_PARSE[key];
});
(ПРИМЕЧАНИЕ: правильная последовательность месяцев теперь будет в переменной «ordered»)
Спасибо за ответ ! Я пробовал эту сортировку, но когда мы повторяем в каждом цикле, первое значение будет октябрь. $.each(упорядочено, функция(индекс,значение){ console.info(значение); }); вывод: октябрь VM6685:161 ноябрь VM6685:161 декабрь VM6685:161 январь..... Это не работает для меня.
Я знаю, что это старый вопрос, но, поскольку на него нет правильного ответа, я хочу просто уточнить для всех, кто когда-либо сталкивался с этим сомнением:
Объекты имеют естественную сортировку по ключу в определенных контекстах, поскольку не стоит доверять ей, если вы хотите, чтобы ваши данные были отсортированы в определенной последовательности, вместо этого используйте массив.
Вот фрагмент с двумя возможными решениями (одно все еще использует объекты, но на самом деле не указано, а другое с массивом месяцев):
// If you want to stick with the object key sorting, even it being not really trustable, simply remove the '0' in the beginning of each numeric key in your JSON string (if this don't causes any kind of trouble in your context)
let obj1 = JSON.parse(`{"01":"January","02":"February","03":"March","04":"April","05":"May","06":"June","07":"July ","08":"August","09":"September","10":"October","11":"November","12":"December"}`.replace(/"0/g,'"'));
console.info(obj1);
/* Output:
{
"1": "January",
"2": "February",
"3": "March",
"4": "April",
"5": "May",
"6": "June",
"7": "July ",
"8": "August",
"9": "September",
"10": "October",
"11": "November",
"12": "December"
}
*/
// Using array to mantain the desired element sort, using the received object as it comes from your PHP server
let obj2 = JSON.parse(`{"01":"January","02":"February","03":"March","04":"April","05":"May","06":"June","07":"July ","08":"August","09":"September","10":"October","11":"November","12":"December"}`);
let monthList = Array(12).fill(0).map( (m, i) => obj2[`${i+1}`.padStart(2,'0')]);
console.info(monthList);
/* Output:
[
"January",
"February",
"March",
"April",
"May",
"June",
"July ",
"August",
"September",
"October",
"November",
"December"
]
*/
взгляните на stackoverflow.com/questions/29623333/…