JavaScriptのArray.prototype.flatMap()メソッドは、配列の要素を変換し、その結果を1レベル平坦化する便利な機能です。map()とflat()を組み合わせたような動作をする単一のメソッドとして、より効率的な配列操作を実現します。
flatMap()の基本構文
array.flatMap(callback(currentValue[, index[, array]]))- callback: 各要素に対して実行される関数
- currentValue: 現在処理している要素
- index: 現在の要素のインデックス(省略可能)
- array: メソッドが呼び出された配列(省略可能)
基本的な使用例
const numbers = [1, 2, 3];
// map()とflat()を別々に使用する場合
const result1 = numbers.map(x => [x, x * 2]).flat();
console.log(result1); // [1, 2, 2, 4, 3, 6]
// flatMap()を使用する場合
const result2 = numbers.flatMap(x => [x, x * 2]);
console.log(result2); // [1, 2, 2, 4, 3, 6]flatMap()の実践的な使用例
1. 文字列の分割と平坦化
const sentences = ['Hello world', 'Good morning'];
const words = sentences.flatMap(sentence => sentence.split(' '));
console.log(words); // ['Hello', 'world', 'Good', 'morning']2. 条件付きの要素追加
const numbers = [1, 2, 3, 4];
const result = numbers.flatMap(num => {
if (num % 2 === 0) {
return [num, num * 2];
}
return [num];
});
console.log(result); // [1, 2, 4, 3, 4, 8]3. 無効な要素の除外
const data = [1, null, 3, undefined, 5];
const validNumbers = data.flatMap(item => {
return item ? [item] : [];
});
console.log(validNumbers); // [1, 3, 5]map()とflat()の組み合わせとの違い
flatMap()は以下の点で優れています:
1. パフォーマンス: 単一の操作で実行されるため、より効率的
2. メモリ使用: 中間配列を作成しないため、メモリ効率が良い
3. コードの可読性: より簡潔に記述可能
ブラウザ互換性
flatMap()は比較的新しいメソッドですが、主要なモダンブラウザでサポートされています:
- Chrome 69以降
- Firefox 62以降
- Safari 12以降
- Edge 79以降
古いブラウザをサポートする必要がある場合は、ポリフィルの使用を検討してください。
まとめ
flatMap()メソッドは、配列の変換と平坦化を効率的に行うための強力なツールです。特に:
- 配列要素の変換と平坦化を1つの操作で実行
- パフォーマンスとメモリ効率に優れる
- コードをより簡潔に記述可能
適切な使用シーンで活用することで、より効率的で読みやすいコードを作成できます。