После разбора последовательность списка месяцев меняется

Получен объект 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 месяца в правильной последовательности месяцев?

взгляните на stackoverflow.com/questions/29623333/…

AZ_ 20.03.2019 09:03

Проблема в том, что «число» на самом деле интерпретируется как строка... Я пытаюсь проанализировать его в PHP и получить тот же результат... Вы можете принудительно проанализировать ключ в PHP как int.

Eiji 20.03.2019 10:21
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
61
2

Ответы 2

пытаться:

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 январь..... Это не работает для меня.

ADDC 20.03.2019 14:16

Я знаю, что это старый вопрос, но, поскольку на него нет правильного ответа, я хочу просто уточнить для всех, кто когда-либо сталкивался с этим сомнением:

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

Вот фрагмент с двумя возможными решениями (одно все еще использует объекты, но на самом деле не указано, а другое с массивом месяцев):

// 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"
]
*/

Другие вопросы по теме