3

次の 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\"" が 2 番目の要素になります。

ただし、Chrome と IE では、JSON オブジェクトはキーの昇順で自動的に並べ替えられます。したがって、"2":"11\" x 8.5\"" が最初の要素になり、"4":"8.5\" x 11\"" が 2 番目の要素になります。

Chrome と IE で自動ソートを無効にするにはどうすればよいですか?

4

1 に答える 1

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" }
}

オブジェクトはサーバー (AZ 用語集) で名前順に並べ替えられており、次のリストをレンダリングしたいと考えています。

var data = myObject, i;

console.log(data);

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

Chrome のログ:

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}

そして、私のリストは正しく表示されます。

于 2013-04-04T08:51:10.500 に答える