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

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

オブジェクトの配列を配列の配列へ変換する

たとえば、次のようなオブジェクトの配列があるとします。

const arr = [
    {"2015":11259750.05},
    {"2016":14129456.9}
];

このような配列を引数として受け取り、入力データをもとに「配列の配列」(2次元配列)を組み立てるJavaScript関数を作成することを考えます。各オブジェクトのキーと値をペアにした配列へと変換するイメージです。

したがって、上記の配列に対して期待される出力は次のようになります。

const output = [
    [2015,11259750.05],
    [2016,14129456.9]
];

実装方法

変換の手順はシンプルです。Object.keys() を使えばオブジェクトが持つキーの一覧を取得できるので、まず各オブジェクトの先頭のキーを取り出します。続いて、そのキーを parseInt() で数値に変換し、対応する値とセットにして結果用の配列へ追加していきます。

コードは次のようになります。

const arr = [
    {"2015":11259750.05},
    {"2016":14129456.9}
];
const mapToArray = (arr = []) => {
    const res = [];
    arr.forEach(function(obj,index){
       const key= Object.keys(obj)[0];
       const value = parseInt(key, 10);
       res.push([value, obj[key]]);
    });
    return res;
};
console.log(mapToArray(arr));

より簡潔な書き方:mapを使う別解

forEachで結果配列を手動で組み立てる代わりに、Array.prototype.map() を使えば同じ処理をより簡潔に記述できます。

const mapToArray = (arr = []) =>
    arr.map(obj => {
       const key = Object.keys(obj)[0];
       return [parseInt(key, 10), obj[key]];
    });
console.log(mapToArray(arr));

出力結果

いずれのコードでも、コンソールには次のように出力されます。

[ [ 2015, 11259750.05 ], [ 2016, 14129456.9 ] ]

ポイント

  • parseInt(key, 10):キーを10進数の整数に変換しています。キーを文字列のまま扱いたい場合は、この変換を省略してください。
  • Object.keys(obj)[0]:1つのオブジェクトに複数のキーがある場合、先頭のキーのみが使用されます。すべてのキーと値のペアが必要なケースでは、Object.entries() の利用も検討するとよいでしょう。
  1. JavaScriptで1つのオブジェクトを人物ごとのオブジェクト配列に変換する方法

    はじめに JavaScriptでは、フラットなキーと値のペアで構成されたオブジェクトを、意味のあるまとまりごとのオブジェクト配列へ変換したいケースがよくあります。例えば「Person1_Age」「Person2_Height」のように、複数人分のデータが1つのオブジェクトに混在している場合、人物ごとにデータを分割して整理しておくと、後続の処理が格段に行いやすくなります。 問題の概要 次のような、複数人分の年齢・身長・体重のデータを持つオブジェクトを考えてみましょう。 const obj = {   Person1_Age: 22,   Person1_H

  2. JavaScriptでオブジェクトの配列を1つのプレーンなオブジェクトにまとめる方法

    JavaScriptでは、複数のオブジェクトに分かれたプロパティを、1つのプレーンなオブジェクト(単一のオブジェクト)に統合したい場面があります。本記事では、オブジェクトの配列を受け取って、その中に含まれるすべてのプロパティを1つのオブジェクトへ集約する方法を、サンプルコードとともにわかりやすく解説します。変換元となるデータ例として、次のように2つのオブジェクトを持つ配列を用意します。const arr = [{     name: Dinesh Lamba,     age: 23,   &n