【问题标题】:After parsing month list sequence get changed解析月份列表序列后更改
【发布时间】:2019-08-10 20:29:07
【问题描述】:

在 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: “二月”,03:“三月”,04:“四月”,05:“五月”,……}

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

【问题讨论】:

  • 问题是“数字”实际上被解释为字符串...我尝试在 PHP 中解析它并得到相同的结果...您可以强制解析 PHP 中的密钥作为一个整数。

标签: javascript php jquery json


【解决方案1】:

尝试:

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

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

【讨论】:

  • 感谢您的回复!我已经尝试过这种排序,但是当我们在每个循环中迭代时,它会给出十月的第一个值。 $.each(ordered, function(index,value){ console.log(value); });输出:十月 VM6685:161 十一月 VM6685:161 十二月 VM6685:161 一月.....这对我不起作用。
【解决方案2】:

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

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

这里有一些 sn-p 有两种可能的解决方案(一个仍在使用对象,但没有真正指明,另一个使用月份数组):

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    相关资源
    最近更新 更多