JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

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' }
}

  1. JavaScriptでオブジェクトを作成し、プロパティにアクセスする方法を徹底解説

    JavaScriptでは、オブジェクトリテラル(波括弧 {})を使うことで、キーと値のペアを持つオブジェクトを簡単に作成できます。作成したオブジェクトのプロパティには、ドット記法(obj.propertyName)やブラケット記法(obj[propertyName])でアクセスします。 以下は、JavaScriptでオブジェクトを作成し、そのプロパティやメソッドにアクセスする具体的なコード例です。 コード例 <!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta

  2. JavaScriptで値に基づいてオブジェクトをグループ化する方法

    JavaScriptでは、reduce()メソッドを活用することで、配列内のオブジェクトを特定の値(プロパティ)に基づいて効率的にグループ化できます。たとえば、複数人のデータを「年齢」ごとにまとめたい場合などに役立ちます。ここでは、実際に動作するサンプルコードをもとに、実装手順と仕組みをわかりやすく解説します。 サンプルコード <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewpo