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

JavaScriptのreduce()メソッドで2次元配列をオブジェクトに変換する方法

JavaScriptでは、名前と年齢などのデータを含む2次元配列(配列の中に配列が入った構造)を扱うことがあります。このようなデータは、キーと値のペアを持つオブジェクトに変換すると、検索や操作が格段に行いやすくなります。

本記事では、Array.prototype.reduce()メソッドを使って2次元配列をオブジェクトに変換する方法を解説します。

変換元となる2次元配列の例

まず、人物の名前と年齢のデータが格納された、以下のような2次元配列を想定します。

const data = [
    ['Rahul', 23],
    ['Vikky', 27],
    ['Sanjay', 29],
    ['Jay', 19],
    ['Dinesh', 21],
    ['Sandeep', 45],
    ['Umesh', 32],
    ['Rohit', 28],
];

各サブ配列の最初の要素(文字列)をキーに、2番目の要素(数値)をとして持つオブジェクトを作成することを目標とします。

reduce()メソッドでオブジェクトを構築する

Array.prototype.reduce()は、配列の各要素を順番に処理しながら、単一の結果(ここではオブジェクト)を累積的に組み立てていくのに最適なメソッドです。初期値として空のオブジェクト{}を渡し、ループ内でキーと値を代入していきます。

const data = [
    ['Rahul', 23],
    ['Vikky', 27],
    ['Sanjay', 29],
    ['Jay', 19],
    ['Dinesh', 21],
    ['Sandeep', 45],
    ['Umesh', 32],
    ['Rohit', 28],
];

const constructObject = arr => {
    return arr.reduce((acc, val) => {
        const [key, value] = val; // 分割代入でキーと値を取り出す
        acc[key] = value;
        return acc;
    }, {});
};

console.log(constructObject(data));

コードのポイント

  • 初期値{}: reduce()の第2引数に空オブジェクトを渡すことで、そこへ結果を蓄積します。
  • 分割代入: const [key, value] = val;により、各サブ配列から1行でキーと値を取り出せます。
  • acc の返却: 各イテレーションで累積オブジェクトaccを必ず返すことで、処理が次の要素へ引き継がれます。

実行結果

コンソールには以下のように出力されます。

{
    Rahul: 23,
    Vikky: 27,
    Sanjay: 29,
    Jay: 19,
    Dinesh: 21,
    Sandeep: 45,
    Umesh: 32,
    Rohit: 28
}

補足:Object.fromEntries()を使ったより簡潔な方法

モダンなJavaScript環境では、ES2019で導入されたObject.fromEntries()を利用すると、さらに短く書けます。

const obj = Object.fromEntries(data);
console.log(obj);
// { Rahul: 23, Vikky: 27, ... }

また、new Map(data)でMapオブジェクトを生成してからObject.fromEntries()に渡す方法もあります。状況に応じて使い分けるとよいでしょう。

  1. 【JavaScript】配列内のネストされたオブジェクトの値を合計する方法

    この記事では、JavaScriptを使って、配列内にネストされた(入れ子構造の)オブジェクトの値を合計する方法を解説します。サンプルコードでは、JSONデータの複数階層に格納された数値(costNum)を順番に取り出し、その合計をブラウザ上に表示します。 コード例 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=d

  2. JavaScriptのObject.keys().map()とArray.map()の違いを徹底解説

    JavaScriptにおいて、Array.map()は配列の各要素に関数を適用し、その結果を新しい配列として返すメソッドです。一方、オブジェクトには直接map()メソッドが用意されていないため、Object.keys().map()という形で、まずObject.keys()を使ってオブジェクトのキーを配列として取得し、そこにmap()を適用するのが一般的なテクニックとなります。 この記事では、両者の使い方の違いを、実際に動作するサンプルコードと実行結果をもとにわかりやすく解説します。 サンプルコード 以下は、Object.keys().map()とArray.map()の動作を比較できるJa