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

IT技术 javascript json internet-explorer google-chrome
2021-02-20 08:56:25

我正在使用以下 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\""})

创建这些复选框的 JavaScript 是:

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

在 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 上禁用自动排序?

1个回答

同样的问题在这里。我的 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" }
}

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

var data = myObject, i;

console.log(data);

for (i in data) {
    if (data.hasOwnProperty(i)) {
         // do stuff
    }
}

铬日志:

Object {4: Object, 8: Object, 15: Object, 24: Object}

并且我的 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" }
}

Chrome 现在记录:

Object {_15: Object, _4: Object, _24: Object, _8: Object}

我的清单是正确的。

@RWAM 对我不起作用,我使用了 " 然后从前端将其删除
2021-05-11 08:56:25
它不再起作用了,有什么新的解决方法吗?
2021-05-13 08:56:25
我也遇到了类似的问题,我通过添加空格而不是下划线(“ 15”:“abc”,“ 8”:“cde”,...)来解决它,因此您无需手动删除下划线
2021-05-14 08:56:25
@MuditGulgulia 在最新版本的 chrome 上进行了测试,没有发现任何区别。解决方法仍然有效。
2021-05-15 08:56:25