【问题标题】:Prevent javascript from changing the order of the JSON防止 javascript 改变 JSON 的顺序
【发布时间】:2017-02-23 16:14:12
【问题描述】:

使用 JSON 数据,javascript 改变对象的顺序:

{
    "01": { "disabled": 0, "factor": 10, "id": "01", "tickets": 0 },
    "02": { "disabled": 0, "factor": 10, "id": "02", "tickets": 0 },
    "03": { "disabled": 0, "factor": 10, "id": "03", "tickets": 0 },
    "04": { "disabled": 0, "factor": 10, "id": "04", "tickets": 0 },
    "05": { "disabled": 0, "factor": 10, "id": "05", "tickets": 0 },
    "06": { "disabled": 0, "factor": 10, "id": "06", "tickets": 0 },
    "07": { "disabled": 0, "factor": 10, "id": "07", "tickets": 0 },
    "08": { "disabled": 0, "factor": 10, "id": "08", "tickets": 0 },
    "09": { "disabled": 0, "factor": 10, "id": "09", "tickets": 0 },
    "10": { "disabled": 0, "factor": 10, "id": "10", "tickets": 0 },
    "11": { "disabled": 1, "factor": 40, "id": "11", "tickets": 0 }
}

到这里:

{
    "10": { "disabled": 0, "factor": 10, "id": "10", "tickets": 0 },
    "11": { "disabled": 1, "factor": 40, "id": "11", "tickets": 0 },
    "01": { "disabled": 0, "factor": 10, "id": "01", "tickets": 0 },
    "02": { "disabled": 0, "factor": 10, "id": "02", "tickets": 0 },
    "03": { "disabled": 0, "factor": 10, "id": "03", "tickets": 0 },
    "04": { "disabled": 0, "factor": 10, "id": "04", "tickets": 0 },
    "05": { "disabled": 0, "factor": 10, "id": "05", "tickets": 0 },
    "06": { "disabled": 0, "factor": 10, "id": "06", "tickets": 0 },
    "07": { "disabled": 0, "factor": 10, "id": "07", "tickets": 0 },
    "08": { "disabled": 0, "factor": 10, "id": "08", "tickets": 0 },
    "09": { "disabled": 0, "factor": 10, "id": "09", "tickets": 0 }
}

请注意,即使在原始 JSON 中,开头的“10”和“11”行也在末尾。

我用这个来修复它:

var data = JSON.parse(json_data);
var keys = Object.keys(data).sort();

for ( var k in keys )
{
    var key = keys[k];
    var row = data[key];
    console.log(row);
};

如何防止javascript改变行的顺序?

那个错误(因为它是)让我很生气。 :-/

感谢您的帮助。

【问题讨论】:

  • 不保证 JavaScript 对象中属性的顺序。
  • 我知道它正在寻找答案。 :-(
  • 细说一下,如果需要保证顺序,使用数组。 JSON 不适合人类消费,因此期望 JavaScript 将其格式化以供人类消费不会有好结果。如果您确实需要格式化 JSON 以供人类阅读,请考虑使用像 jq 这样的外部实用程序。支持按键排序。
  • 如果“索引”很重要,请使用数组,或者为它重用 id 属性。如果您将其用作字典以直接通过 id 引用记录,我更喜欢使用数组作为源,然后在运行时创建字典哈希表。
  • 您需要如何处理这些使订单变得重要的数据?

标签: javascript arrays json sorting


【解决方案1】:

您应该查看bpierre"Does JavaScript Guarantee Object Property Order?" 的回答。

总结一下,ECMAScript 中 Object 的定义说

它是一个无序的属性集合 [...]

在他的回答中,他建议在更新的 JavaScript 版本中使用 Map

所以答案是否定的,你不能阻止 JavaScript 改变 JSON 的顺序,因为一开始就没有确定的顺序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 2017-04-30
    • 2022-08-03
    相关资源
    最近更新 更多