0

次のコードがあります。

function() {
    $.getJSON(
        myurl + '/get_data',
        function(data) {
            function sort_data(first, second) {
                return (first.sort - second.sort);
            }
            console.log(data);
            console.log(data.sort(sort_data));
        }
        ... snipped for brevity

データはオブジェクトの配列で、各オブジェクトには整数のソート フィールドがあります。デフォルトでは、それらはすべてランダムな順序になっています。したがって、上記のコードを実行すると、並べ替えの前後のデータが同一で​​あることがわかります。少なくとも両方の console.log 出力は同じです (そして、それらはソートされています)。ただし、並べ替えの部分をスキップして console.log(data.objects) だけにすると、それは異なり、並べ替えられません。
sort が最初に実行され、console.logs が後で実行されるようです。なぜそうなのですか?ありがとう!

4

1 に答える 1

3

これはconsole.log()、オブジェクトへの参照が出力され、sort() が同じオブジェクト参照内のデータを再配置するためです。

違いを見たい場合は、

console.log(JSON.stringify(data));
console.log(JSON.stringify(data.sort(sort_data)));

JSON.stringify()json オブジェクトの文字列表現を作成します。これは、json オブジェクトに加えられた変更の影響を受けません。

于 2013-04-25T08:48:24.533 に答える