JavaScriptでキー値をもとにネストされたオブジェクトをソートする方法
文字列リテラルをキーとし、その値もまたオブジェクトとなっている、次のようなデータ構造があったとしましょう。
const companies = {
'landwaves ltd': { employees: 1200, worth: '1.2m', CEO: 'Rajiv Bansal' },
'colin & co': { employees: 200, worth: '0.2m', CEO: 'Sukesh Maheshwari' },
'motilal biscuits': { employees: 975, worth: '1m', CEO: 'Rahul Gupta' },
'numbtree': { employees: 1500, worth: '1.5m', CEO: 'Jay Kumar' },
'solace pvt ltd': { employees: 1800, worth: '1.65m', CEO: 'Arvind Sangal' },
'ambicure': { employees: 170, worth: '0.1m', CEO: 'Preetam Chawla' },
'dis n dat': { employees: 540, worth: '1m', CEO: 'Mohit Sharma' },
};ここで求められるのは、このオブジェクトをキー名の順番(アルファベット順)に並べ替えて返す関数を書くことです。
実装例
const companies = {
'landwaves ltd': { employees: 1200, worth: '1.2m', CEO: 'Rajiv Bansal' },
'colin & co': { employees: 200, worth: '0.2m', CEO: 'Sukesh Maheshwari' },
'motilal biscuits': { employees: 975, worth: '1m', CEO: 'Rahul Gupta' },
'numbtree': { employees: 1500, worth: '1.5m', CEO: 'Jay Kumar' },
'solace pvt ltd': { employees: 1800, worth: '1.65m', CEO: 'Arvind Sangal' },
'ambicure': { employees: 170, worth: '0.1m', CEO: 'Preetam Chawla' },
'dis n dat': { employees: 540, worth: '1m', CEO: 'Mohit Sharma' },
};
const sortKeys = (obj) => {
return Object.assign(
...Object.entries(obj)
.sort()
.map(([key, value]) => ({ [key]: value }))
);
};
console.log(sortKeys(companies));コードの仕組み
この関数がどのように動作しているのか、処理の流れを順番に見ていきましょう。
- Object.entries(obj): オブジェクトを「[キー, 値]」という形式の配列の配列へと変換します。
- .sort(): 各ペアをキー名の辞書順(アルファベット順)に並べ替えます。デフォルトでは文字列比較が行われるため、キーが文字列であればそのまま正しくソートされます。
- .map(([key, value]) => ({ [key]: value })): ソート済みの各ペアを、単一のキーと値だけを持つ新しいオブジェクトに変換します。
- Object.assign(...): スプレッド構文で展開したすべてのオブジェクトを、1つのオブジェクトへとマージします。
なお、ES2015(ECMAScript 2015)以降の仕様では、整数型のインデックス以外の文字列キーは挿入された順序で保持されることが保証されています。そのため、ソートした順序でオブジェクトを再構築すれば、その並び順は維持されます。
出力結果
コンソールには次のように出力されます。キーがアルファベット順に並べ替えられているのが確認できます。
{
ambicure: { employees: 170, worth: '0.1m', CEO: 'Preetam Chawla' },
'colin & co': { employees: 200, worth: '0.2m', CEO: 'Sukesh Maheshwari' },
'dis n dat': { employees: 540, worth: '1m', CEO: 'Mohit Sharma' },
'landwaves ltd': { employees: 1200, worth: '1.2m', CEO: 'Rajiv Bansal' },
'motilal biscuits': { employees: 975, worth: '1m', CEO: 'Rahul Gupta' },
numbtree: { employees: 1500, worth: '1.5m', CEO: 'Jay Kumar' },
'solace pvt ltd': { employees: 1800, worth: '1.65m', CEO: 'Arvind Sangal' }
}-
JavaScriptでオブジェクトを作成し、プロパティにアクセスする方法を徹底解説
JavaScriptでは、オブジェクトリテラル(波括弧 {})を使うことで、キーと値のペアを持つオブジェクトを簡単に作成できます。作成したオブジェクトのプロパティには、ドット記法(obj.propertyName)やブラケット記法(obj[propertyName])でアクセスします。 以下は、JavaScriptでオブジェクトを作成し、そのプロパティやメソッドにアクセスする具体的なコード例です。 コード例 <!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta
-
JavaScriptで値に基づいてオブジェクトをグループ化する方法
JavaScriptでは、reduce()メソッドを活用することで、配列内のオブジェクトを特定の値(プロパティ)に基づいて効率的にグループ化できます。たとえば、複数人のデータを「年齢」ごとにまとめたい場合などに役立ちます。ここでは、実際に動作するサンプルコードをもとに、実装手順と仕組みをわかりやすく解説します。 サンプルコード <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewpo