解析月份列表顺序后更改

时间:2019-03-20 07:47:45

标签: javascript php jquery json

从php MONTHLY_FORMAT的服务器端接收json编码对象,在jquery中将该对象读取为

var MONTHLY_FORMAT = '<?php echo $MONTHLY_FORMAT; ?>';

在控制台中获得以下输出:

  

{“ 01”:“一月”,“ 02”:“二月”,“ 03”:“三月”,“ 04”:“四月”,“ 05”:“五月”,“ 06”:“六月“,” 07“:”七月   “,” 08“:”八月“,” 09“:”九月“,” 10“:”十月“,” 11“:”十一月“,” 12“:”十二月“}

但是在执行JSON解析

之后
var MONTHLY_FORMAT_PARSE = JSON.parse( MONTHLY_FORMAT );

一样返回输出
  

{10:“十月”,11:“十一月”,12:“十二月”,01:“一月”,02:   “ February”,03:“ March”,04:“ April”,05:“ May”,...}

如何按正确的月份顺序获取月份json对象列表?

2 个答案:

答案 0 :(得分:1)

我知道这是一个古老的问题,但由于未得到正确回答,因此我想向遇到此疑问的任何其他人澄清一下:

对象在特定的上下文中自然具有键排序,因为不明智地信任它,因此,如果要维护按特定顺序排序的数据,请改用Array。

下面是一些带有两种可能的解决方案的代码段(一个仍在使用对象,但未真正显示出来,另一个带有数月的数组):

// 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.log(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.log(monthList);

/* Output:
[
  "January",
  "February",
  "March",
  "April",
  "May",
  "June",
  "July ",
  "August",
  "September",
  "October",
  "November",
  "December"
]
*/

答案 1 :(得分:0)

尝试:

const ordered = {};
Object.keys(MONTHLY_FORMAT_PARSE).sort().forEach(function(key) {
    ordered[key] = MONTHLY_FORMAT_PARSE[key];
});

(注意:正确的月份顺序现在将在变量“ ordered”中)