Chrome和IE会自动排序JSON对象,如何禁用它?

Deb*_*sad 2 javascript internet-explorer json google-chrome

我使用以下JSON使用JavaScript创建一些复选框.

{"5":"5.5\" x 8.5\"",
"11":"7\" x 10\"",
"4":"8.5\" x 11\"",
"8":"8.5\" x 14\"",
"12":"10\" x 7\"",
"2":"11\" x 8.5\"",
"10":"11\" x 17\"",
"6":"14\" x 8.5\"",
"9":"17\" x 11\""})
Run Code Online (Sandbox Code Playgroud)

用于创建这些复选框的JavaScript是:

for(id in dimensions) {
    $("#the_dimensions").append('<label class="checkbox">' + 
                                '<input type="checkbox" class="dimensions-filter" value="' + id + '">' +
                                dimensions[id] + '</label>');
}
Run Code Online (Sandbox Code Playgroud)

在Firefox上,将根据JSON对象中的顺序创建复选框.因此,"5":"5.5 \"x 8.5 \""成为第一个元素,"11":"7 \"x 10 \""成为第二个元素,依此类推.

但是在Chrome和IE上,JSON对象会按照键的升序自动排序.因此,"2":"11"x 8.5 \""成为第一个元素,"4":"8.5 \"x 11 \""成为第二个元素,依此类推.

如何在Chrome和IE上禁用自动排序?

RWA*_*WAM 13

同样的问题在这里 我的JSON对象看起来像这样:

{
  "15" : { "name" : "abc", "desc" : "Lorem Ipsum" },
  "4"  : { "name" : "def", "desc" : "Foo Bar Baz" },
  "24" : { "name" : "ghi", "desc" : "May be" },
  "8"  : { "name" : "jkl", "desc" : "valid" }
}
Run Code Online (Sandbox Code Playgroud)

该对象按服务器上的名称排序(AZ词汇表),我想用以下内容呈现一个列表:

var data = myObject, i;

console.log(data);

for (i in data) {
    if (data.hasOwnProperty(i)) {
         // do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

Chrome日志:

Object {4: Object, 8: Object, 15: Object, 24: Object}
Run Code Online (Sandbox Code Playgroud)

而我的for-in循环导致错误的排序.它会自动按浏览器排序,但我需要ID.

我的解决方案:
我决定用带前缀的下划线更改密钥.我的目标现在看起来:

{
  "_15" : { "name" : "abc", "desc" : "Lorem Ipsum" },
  "_4"  : { "name" : "def", "desc" : "Foo Bar Baz" },
  "_24" : { "name" : "ghi", "desc" : "May be" },
  "_8"  : { "name" : "jkl", "desc" : "valid" }
}
Run Code Online (Sandbox Code Playgroud)

Chrome现在登录:

Object {_15: Object, _4: Object, _24: Object, _8: Object}
Run Code Online (Sandbox Code Playgroud)

我的列表是正确的.