JavaScriptでオブジェクトのエントリをキー順にソートして取得する方法
JavaScriptでは、オブジェクトのエントリ(キーと値のペア)をキーの昇順など特定の順序で取り出したいケースはよくあります。本記事では、Object.keys()、sort()、Object.fromEntries() を組み合わせて、オブジェクトのエントリを順番に並べ替えて取得する方法を解説します。
対象となるオブジェクト
まず、次のようなオブジェクトを例に考えてみましょう。
const subjectDetails = {
102: "Java",
105: "JavaScript",
104: "MongoDB",
101: "MySQL"
};
このオブジェクトは、科目コードがキー、科目名が値として格納されています。キーは102、105、104、101とバラバラの順序で定義されているため、これを101〜105の昇順に並べ替えて取得します。
sort()メソッドを使った実装の手順
エントリを順番に取得するには、以下の流れで処理を行います。
- Object.keys():オブジェクトのすべてのキーを配列として取得する
- sort():取得したキーを昇順に並べ替える
- map():各キーを [キー, 値] のペアに変換する
- Object.fromEntries():ペアの配列から新しいオブジェクトを生成する
実際のコードは次のようになります。
const orderSubjects =
Object.fromEntries(Object.keys(subjectDetails).sort().map((k) => {
return [k, subjectDetails[k]];
}));
完全なサンプルコード
const subjectDetails = {
102: "Java",
105: "JavaScript",
104: "MongoDB",
101: "MySQL"
};
const orderSubjects =
Object.fromEntries(Object.keys(subjectDetails).sort().map((k) => {
return [k, subjectDetails[k]];
}));
console.log(orderSubjects);
プログラムの実行方法
上記のプログラムを実行するには、Node.js環境で以下のコマンドを使用します。
node fileName.js
実行結果
ここではファイル名を demo146.js としています。実行すると、以下の出力が得られます。
PS C:\Users\Amit\JavaScript-code> node demo146.js
{
'101': 'MySQL',
'102': 'Java',
'104': 'MongoDB',
'105': 'JavaScript'
}
ご覧のとおり、元のオブジェクトではキーが102、105、104、101の順で定義されていましたが、出力結果ではキーが昇順(101、102、104、105)にきちんと並べ替えられています。数値のように見えるキーも、JavaScriptでは文字列として扱われるため、辞書順のソートでもこの例のように意図した結果が得られます。降順にしたい場合は .sort((a, b) => b - a) のように比較関数を渡すだけで対応できます。
-
JavaScriptのRegExp(正規表現)オブジェクトとは?基本の使い方をわかりやすく解説
RegExp(正規表現)オブジェクトは、テキストに対してパターンマッチングを行い、目的の文字列部分を検索・抽出するために使用されます。JavaScriptでは、RegExpオブジェクトを「RegExpコンストラクタ」または「リテラル構文」の2通りの方法で作成できます。 RegExpオブジェクトの作成方法 コンストラクタを使用する場合: new RegExp(pattern) リテラル構文を使用する場合: /pattern/ 主なメソッド test():文字列がパターンに一致するかどうかを真偽値(true / false)で返します。 exec():パターンに一致した文字列を返します。
-
JavaScriptのオブジェクト初期化子とは?使い方をサンプルコードで解説
オブジェクト初期化子とは オブジェクト初期化子(Object Initializer)は、新しく生成したオブジェクトを初期化するための式です。波括弧 {} の中に、「プロパティ名」と「それに対応する値」のペアを0個以上、カンマ区切りで列挙して記述します。 これにより、変数宣言と同時にオブジェクトの中身を簡単に定義することができます。 以下は、JavaScriptでオブジェクト初期化子を使用したサンプルコードです。 サンプルコード <!DOCTYPE html> <html lang="en"> <head> <meta chars