2014/02/04

【JavaScript】オブジェクトをキーでソートする方法

【JavaScript】オブジェクトをキーでソートする方法

オブジェクトをキーでソートする必要に駆られたんですが,配列要素をソート・逆ソートする方法はあるものの,オブジェクトのキーでソートする方法が無かったので紹介します.

目次

配列のソート

配列要素をソートするには,sort()メソッドを使用します.パラメータには比較用関数が指定でき,昇順と降順のソートをさせることが出来ます.
パラメータに何も指定しない場合は,文字コード順のソートになります.

/*昇順のソート*/
array.sort(function(a,b){
    return a-b;
});

/*降順のソート*/
array.sort(function(a,b){
    return b-a;
});

また,逆順にするにはreverse()メソッドを使用することで,配列要素を逆順にすることが出来ます.

/*配列要素を逆順にする*/
array.reverse();

オブジェクトをソートする方法

function objectSort(object) {
    //戻り値用新オブジェクト生成
    var sorted = {};
    //キーだけ格納し,ソートするための配列生成
    var array = [];
    //for in文を使用してオブジェクトのキーだけ配列に格納
    for (key in object) {
        //指定された名前のプロパティがオブジェクトにあるかどうかチェック
        if (object.hasOwnProperty(key)) {
            //if条件がtrueならば,配列の最後にキーを追加する
            array.push(key);
        }
    }
    //配列のソート
    array.sort(); 
    //配列の逆ソート
    //array.reverse();

    //キーが入った配列の長さ分だけfor文を実行
    for (var i = 0; i < array.length; i++) {
        /*戻り値用のオブジェクトに
        新オブジェクト[配列内のキー] = 引数のオブジェクト[配列内のキー]を入れる.
        配列はソート済みなので,ソートされたオブジェクトが出来上がる*/
        sorted[array[i]] = object[array[i]];
    }
    //戻り値にソート済みのオブジェクトを指定
    return sorted;
}

オブジェクトのキーでソートするために,キーだけを抜き出して配列に格納し,配列をソートします.

引数のオブジェクトのキーに配列内のキーを指定し,別の配列に格納していくことで,オブジェクトのソートが出来るようになります.

逆ソートしたい場合は,間にreverse()メソッドを挟むことで逆順にすることも出来ます.

まとめ

結局配列に格納してるので,処理が増えてしまっていますが,オブジェクトのソートをやらなければならない場合があったら使用してみてください.
ソート条件を変更することで色々と対応できるようになると思います.