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倍高速:

  1. 中間配列の割り当てなし
  2. 2回ではなく1回の反復
  3. 結合操作に対するエンジン最適化

1レベルのみフラット化します。

ユースケース

flatMap()は各入力要素がゼロ、1つ、または複数の出力要素を生成する必要がある場合に使用します。ネストされたデータの展開(user.roles、node.children)、文字列のトークン分割、filter+mapを単一パスに結合してパフォーマンスを向上させるパターンに最適です。

試してみる — JavaScript Array Methods Reference

フルツールを開く