JavaScriptでオブジェクトのキーと値を配列として取得する方法
概要
リテラル値をマッピングしたオブジェクトを受け取り、そのキーと値を抽出して二次元配列として返すJavaScript関数を作成する方法を解説します。
作成する関数は「配列の中に配列が入った構造(二次元配列)」を返し、各サブ配列は必ず2つの要素を持つ必要があります。1つ目の要素にはオブジェクトの各ペアにおけるキー、2つ目の要素にはそれに対応する値を格納します。
コード例
const obj = {
name: 'Nick',
achievements: 158,
points: 14730
};
const retrieveProperties = (obj = {}) => {
const res = [];
for(const key in obj){
res.push([key, obj[key]]);
};
return res;
};
console.log(retrieveProperties(obj));出力結果
コンソールへの出力は以下のようになります。
[ [ 'name', 'Nick' ], [ 'achievements', 158 ], [ 'points', 14730 ] ]
処理の流れ
この関数の動作を順番に確認してみましょう。
- for...inループを使って、オブジェクト内のすべてのキーを1つずつ取り出します。
- 各反復処理で、
[key, obj[key]]という形式の新しいサブ配列を作成します。keyはプロパティ名、obj[key]はそのプロパティに対応する値です。 push()メソッドで、作成したサブ配列を結果格納用の配列resへ追加していきます。- すべてのキーの処理が完了したら、完成した二次元配列を返します。
なお、ループ変数はconstで宣言するのがベストプラクティスです。宣言なしでfor(key in obj)と書くと暗黙的なグローバル変数が生成され、意図しないバグの原因になることがあります。
よりモダンな方法:Object.entries()を使う
ES2017以降では、組み込みメソッドのObject.entries()を使えば、同じ結果をたった1行で得ることができます。
const obj = {
name: 'Nick',
achievements: 158,
points: 14730
};
const result = Object.entries(obj);
console.log(result);
// [ [ 'name', 'Nick' ], [ 'achievements', 158 ], [ 'points', 14730 ] ]Object.entries()は、オブジェクト自身の列挙可能なプロパティを[キー, 値]というペアの配列にまとめて返すため、自前でループを書く必要がありません。可読性・保守性の面でも優れており、古いブラウザ環境をサポートする必要がない限り、こちらの方法が推奨されます。
-
JavaScriptのArray.values()メソッドとは?使い方とサンプルコードを徹底解説
JavaScriptのArray.values()メソッドとは? JavaScriptのArray.values()メソッドは、対象の配列に含まれるすべての値を格納したイテレーターオブジェクトを返します。ES2015(ES6)以降で利用可能なこのメソッドは、for...ofループやスプレッド構文([...arr])と組み合わせることで、配列の各要素を効率的に取り出せます。 なお、keys()やentries()がインデックス情報も一緒に返すのに対し、values()は純粋に「値」だけを順番に提供する点が大きな特徴です。 基本構文 arr.values() 引数は不要で、戻り値として新しいArr
-
【JavaScript】配列内のネストされたオブジェクトの値を合計する方法
この記事では、JavaScriptを使って、配列内にネストされた(入れ子構造の)オブジェクトの値を合計する方法を解説します。サンプルコードでは、JSONデータの複数階層に格納された数値(costNum)を順番に取り出し、その合計をブラウザ上に表示します。 コード例 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=d