JavaScript Array.flatMap() - マップとフラット化を1ステップで
Array.flatMap()の詳細解説。1対多の変換、filter+mapの結合、map().flat()とのパフォーマンス比較を含みます。無料リファレンス。
Transformation
詳細な説明
flatMap()を理解する
Array.flatMap()はmap()とflat(1)の2つの操作を単一のより効率的なパスに結合します。
基本構文
const result = array.flatMap((element, index, array) => {
return newElement; // または [a, b] または []
});
分割とフラット化
const lines = ["hello world", "foo bar baz"];
const words = lines.flatMap(line => line.split(" "));
// words: ["hello", "world", "foo", "bar", "baz"]
フィルタ + マップの結合
[]を返して除外、[transformed]を返して含める:
const nums = [1, 2, 3, 4, 5, 6, 7, 8];
const result = nums.flatMap(n =>
n % 2 === 0 ? [n ** 2] : []
);
// result: [4, 16, 36, 64]
パフォーマンス
flatMapは以下の理由でmap().flat()より約1.5〜2倍高速:
- 中間配列の割り当てなし
- 2回ではなく1回の反復
- 結合操作に対するエンジン最適化
1レベルのみフラット化します。
ユースケース
flatMap()は各入力要素がゼロ、1つ、または複数の出力要素を生成する必要がある場合に使用します。ネストされたデータの展開(user.roles、node.children)、文字列のトークン分割、filter+mapを単一パスに結合してパフォーマンスを向上させるパターンに最適です。