BeginnerEngineerBlog
中の人
中の人

【javascript object】jsのobjectのindexは勝手にソートされます

公開: 2023-12-04 23:32
更新: 2023-12-05 01:32
76
javascript object sort
今になって知ったのでメモ

こんにちは!

最近apiでサーバーからデータをjsonでフロントに送信して、そのオブジェクトをforで展開しようとしたら、サーバーから送られてきたデータが勝手に昇順でソートされたのでメモします


どういうこと?


つまり何かってことですが、

<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>object_test</title>
    </head>
    <body>
        <script>
            let object_1 = {
                1: {'name': 'hoge'},
                2: {'name': 'huga'},
                3: {'name': 'piyo'},
            }
            console.log(object_1);
            let object_2 = {
                3: {'name': 'hoge'},
                2: {'name': 'huga'},
                1: {'name': 'piyo'},
            }
            console.log(object_2);
            let object_3 = {
                '3': {'name': 'hoge'},
                '2': {'name': 'huga'},
                '1': {'name': 'piyo'},
            }
            console.log(object_3);
            for (key in object_3) {
                console.log(object_3[key]);
            }
            let object_4 = {
                'a': {'name': 'hoge'},
                'b': {'name': 'huga'},
                'c': {'name': 'piyo'},
            }
            console.log(object_4);
            for (key in object_4) {
                console.log(object_4[key]);
            }
            let object_5 = {
                'c': {'name': 'hoge'},
                'b': {'name': 'huga'},
                'a': {'name': 'piyo'},
            }
            console.log(object_5);
            for (key in object_5) {
                console.log(object_5[key]);
            }
        </script>
    </body>
</html>

これは


こうなります

console.logだとindexは昇順になりま
で、文字列も昇順になるのですが、なんていうかよくわかりませんが、展開前はobjectに書いたままの順番ですが、展開すると昇順で表示されます

で、forで回すと
indexはそのまま昇順ですが、文字列はobjectに書いた通りになります(゚∀゚ )< ハ?

つまり数字(index)がkeyになってると、forで回す際、勝手に昇順になるということみたいです。


indexを降順にする


<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>object_test</title>
    </head>
    <body>
        <script>
            let object_1 = {
                1: {'name': 'hoge'},
                2: {'name': 'huga'},
                3: {'name': 'piyo'},
            }
            console.log(object_1);
            let object_2 = {
                3: {'name': 'hoge'},
                2: {'name': 'huga'},
                1: {'name': 'piyo'},
            }
            console.log(object_2);
            let object_3 = {
                '3': {'name': 'hoge'},
                '2': {'name': 'huga'},
                '1': {'name': 'piyo'},
            }
            console.log(object_3);
            for (key in object_3) {
                console.log(object_3[key]);
            }
            let sorted_keys = Object.keys(object_3).sort(function (a, b) {
                return b - a;
            });
            console.log(sorted_keys);
            for (key in sorted_keys) {
                console.log(object_3[sorted_keys[key]]);
            }
        </script>
    </body>
</html>


sortでやるしかなさそうです。

終わりに


サーバーでsortする際は気をつけたいと思います
0
0
0
0
通信エラーが発生しました。
似たような記事