0

私のajax $eachが名前のリストを印刷する方法を変更する理由を理解しようとしていますか?

次のようなjson文字列があります。

[{"name":"Adam","len":1,"cid":2},{"name":"Bo","len":1,"cid":1},{"name":"Bob","len":1,"cid":3},{"name":"Chris","len":1,"cid":7},{"name":"James","len":1,"cid":5},{"name":"Michael","len":1,"cid":6},{"name":"Nick","len":1,"cid":4},{"name":"OJ","len":1,"cid":8}]

ここではすべての名前がアルファベット順にソートされていますが、それらを取得すると「cid」でソートされますか? なぜ、どうすればこれを変更できますか?

これが私のjQueryです:

var names = {};
$.getJSON('http://mypage.com/json/names.php', function(data){ 

    $.each(data.courses, function (k, vali) {
        names[vali.cid] = vali.name;
    });
});

「names[vali.cid]」が原因だと思いますが、その部分をそのままにしておく必要があります。まだできますか?

事前に助けと感謝を願っています:-.)

4

2 に答える 2

1

オブジェクト内の順序付けは、オブジェクトを反復処理するときに、実際には定義されておらず、予測可能でもありません。内部プロパティに基づいて配列をソートすることをお勧めします。

var names = [];
$.getJSON('http://mypage.com/json/names.php', function(data){ 
    $.each(data.courses, function (k, vali) {
        names.push({name: vali.name, cid: vali.cid});
    });

    names.sort(function(a, b) {
        return a.name.localeCompare(b.name);
    });
});

これで、順序付けされた配列が得られ、予測可能な順序で反復処理することもできます。

于 2013-07-24T18:41:28.897 に答える