JavaScript flat()とflatMap() - ネストされた配列のフラット化
Array.flat()とflatMap()でネストされた配列をフラット化する方法を学びます。深さ制御、1対多のマッピング、filter+mapの結合パターンを含みます。無料リファレンス。
Transformation
詳細な説明
flat()とflatMap()を理解する
Array.flat()
flat()は指定された深さまでサブ配列を再帰的に結合した新しい配列を作成します。
const nested = [1, [2, 3], [4, [5, 6]]];
nested.flat(); // [1, 2, 3, 4, [5, 6]] (深さ1)
nested.flat(2); // [1, 2, 3, 4, 5, 6] (深さ2)
nested.flat(Infinity); // [1, 2, 3, 4, 5, 6] (すべてのレベル)
Array.flatMap()
flatMap()は各要素をマッピングしてから結果を1レベルフラット化します。map().flat(1)と同等ですが、より効率的です。
const sentences = ["hello world", "foo bar baz"];
const words = sentences.flatMap(s => s.split(" "));
// words: ["hello", "world", "foo", "bar", "baz"]
フィルタ + マップの結合にflatMap
const nums = [1, 2, 3, 4, 5, 6];
const result = nums.flatMap(n => n % 2 === 0 ? [n * 2] : []);
// result: [4, 8, 12]
パフォーマンスの考慮
flatMap()は中間配列の割り当てを避けるため、map().flat()より約1.5〜2倍高速- 1レベルのみフラット化。より深いフラット化には
map().flat(depth)を使用
ユースケース
flat()はネストされたAPIレスポンス(ツリー構造など)や配列の配列のマージに使用します。flatMap()は文字列の分割、ネストされたプロパティの展開、filter+mapの結合操作など、1対多の変換に使用します。