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

JavaScriptで配列プロパティを持つオブジェクトを1つの配列にフラット化する最適な方法

例えば、次のように複数の配列を値として持つオブジェクトがあったとします。

const obj = {
    arr_a: [9, 3, 2],
    arr_b: [1, 5, 0],
    arr_c: [7, 18]
};

ここでは、このような「配列の集まりからなるオブジェクト」を引数として受け取り、すべての配列を1つに統合して平坦化(フラット化)した配列を生成するJavaScript関数を作成する必要があります。

そのため、最終的な出力配列は次のようになります。

const output = [9, 3, 2, 1, 5, 0, 7, 18];

実装例

const obj = {
    arr_a: [9, 3, 2],
    arr_b: [1, 5, 0],
    arr_c: [7, 18]
};
const objectToArray = (obj = {}) => {
    const res = [];
    for(key in obj){
        const el = obj[key];
        res.push(...el);
    };
    return res;
};
console.log(objectToArray(obj));

コードの解説

この関数では、for...in ループでオブジェクトの各キーを順番に取り出し、スプレッド構文(...)を使って各配列の要素を展開しながら結果配列へ push しています。これにより、すべての配列の要素が順序を保ちながら1つの配列に結合されます。

出力

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

[
    9, 3, 2, 1,
    5, 0, 7, 18
]

よりモダンな書き方:Object.values() と flat() を使う

ES2019以降の環境では、Object.values() で配列の一覧を取得し、flat() メソッドを組み合わせることで、さらに簡潔に記述できます。

const objectToArray = (obj = {}) =>
    Object.values(obj).flat();

console.log(objectToArray(obj));
// [9, 3, 2, 1, 5, 0, 7, 18]

どちらの方法でも同じ結果が得られますが、Object.values().flat() の方がコードが短く読みやすく、ネストした配列にも対応できるため、実務ではこちらのアプローチが推奨されます。

  1. JavaScriptオブジェクトを配列プロパティの長さで並べ替える方法

    この記事では、各オブジェクトが持つ配列プロパティの要素数(length)を基準にして、JavaScriptのオブジェクトを並べ替える方法を解説します。 ポイントとなる仕組み 並べ替えには Array.prototype.sort() メソッドを使用します。sort() の引数として比較関数(コンパレータ)を渡し、2つのオブジェクトの配列プロパティの length を比較することで、要素数の少ない順(昇順)にソートできます。比較関数は、条件を満たす場合に 1 を、満たさない場合に -1 を返すように記述します。 サンプルコード <!DOCTYPE html> <html la

  2. 【JavaScript入門】複数のオブジェクトを1つにマージして単一のオブジェクト配列を作成する方法

    JavaScriptでは、Object.assign()メソッドとスプレッド構文(...)を組み合わせることで、配列内の複数のオブジェクトを1つのオブジェクトに簡単にマージすることができます。 Object.assign()は、1つ以上のコピー元オブジェクトから、コピー先のオブジェクトへすべてのプロパティをコピーするためのメソッドです。スプレッド構文を使って配列の要素を展開することで、各オブジェクトのキーと値が1つのオブジェクトに統合されます。 コード例 以下のコードは、配列内の複数のオブジェクトを単一のオブジェクトにマージする例です。 <!DOCTYPE html> <ht