【JavaScript】Object.keys()とreduce()を使ってオブジェクトの配列値を単一の値に変換する方法
はじめに
JavaScriptでは、オブジェクトの各キーが持つ配列から特定の要素だけを取り出し、新しいオブジェクトの配列として整形したいケースがあります。本記事では、Object.keys()とreduce()を組み合わせて、配列形式のプロパティ値をその2番目の要素へ変換する方法を解説します。
元となるデータ
例えば、次のようなオブジェクトの配列があるとします。各キーには2つの要素を持つ配列が格納されています。
const arr = [
{
col1: ["a", "b"],
col2: ["c", "d"]
},
{
col1: ["e", "f"],
col2: ["g", "h"]
}
];期待する出力
このような配列を受け取り、各キーの値を配列の2番目の要素(インデックス1)だけに置き換えた、以下のような出力を返す関数を作成します。
const output = [
{
col1: "b",
col2: "d"
},
{
col1: "f",
col2: "h"
}
];つまり、もともと配列だったオブジェクトの各キーの値を単一の値へ変換し、その値として元の配列の2番目の要素を採用するということです。
実装コード
実装は以下のとおりです。reduce()で結果配列を組み立てながら、各オブジェクトに対してObject.keys()でキーを列挙し、対応する配列の2番目の要素を新しいオブジェクトに代入していきます。
const arr = [
{
col1: ["a", "b"],
col2: ["c", "d"]
},
{
col1: ["e", "f"],
col2: ["g", "h"]
}
];
const reduceArray = (arr = []) => {
const res = arr.reduce((s, a) => {
const obj = {};
Object.keys(a).map(function(c) {
obj[c] = a[c][1];
});
s.push(obj);
return s;
}, []);
return res;
};
console.log(reduceArray(arr));実行結果
コンソールへの出力結果は次のようになります。
[ { col1: 'b', col2: 'd' }, { col1: 'f', col2: 'h' } ]コードのポイント
- Object.keys(): オブジェクトのすべてのキー名を配列として取得し、1つずつ反復処理できます。
- a[c][1]: キー
cに紐づく配列の2番目の要素(インデックス1)を参照しています。 - reduce(): 初期値
[]から始めて、変換後のオブジェクトを順に蓄積し、最終的な配列を生成します。
なお、キーを反復処理して新しいオブジェクトを作るだけであれば、map()の代わりにfor...ofループやforEach()を使っても同様の結果が得られます。また、より簡潔に書きたい場合は、arr.map(obj => Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, v[1]])))のようにObject.entries()とObject.fromEntries()を活用する方法もあります。
-
JavaScriptのMapオブジェクトとは?特徴と基本的な使い方を解説
JavaScriptのMapオブジェクトとは MDNドキュメントによると、Mapオブジェクトは「キーと値のペア」を保持し、キーが挿入された元の順序を記憶するデータ構造です。任意の値(オブジェクトとプリミティブ値の両方)を、キーまたは値として自由に使用できます。 ここで特に重要なポイントは、オブジェクトそのものもMapのキーとして使えるという点です。これは通常のJavaScriptオブジェクトでは実現できない動作です。一般的なJSオブジェクトでは、キーとして使用できるのはプリミティブ値(文字列や数値など)のみに限られます。 さらに、Mapが特定の場面で役立つもう一つの大きな特徴は、反復可能(it
-
JavaScriptのImage()オブジェクトとは?使い方とサンプルコードを解説
JavaScriptにおけるImage()オブジェクトは、HTMLの<img>要素を表すオブジェクトです。このオブジェクトを使うことで、JavaScriptから動的に画像を生成し、Webページに追加することができます。Image()コンストラクタには、引数として画像の幅と高さをピクセル単位で指定できます。また、生成した画像オブジェクトのsrcプロパティに画像のURLを設定することで、画像を読み込むことが可能です。Image()オブジェクトの基本的な使い方以下は、JavaScriptでImage()オブジェクトを使用するサンプルコードです。コード例<!DOCTYPE html&