→
その Array の要素の値をコールバック関数に掛けて処理し、結果の値を要素とした 1 段平坦にした配列を返す。空要素は処理されません。
mdn: 最初にマッピング関数を使用してそれぞれの要素をマップした後、結果を新しい配列内にフラット化します。
これは、map() の後に深さ 1 の flat() を行うのと同じですが、これら 2 つのメソッドを別々にコールするよりもわずかに効率的です。
コールバック関数による:
function 関数名(element[, index[, array]]){
処理
}
インライン コールバック関数による:
アロー関数による:
arr | Arrayオブジェクト |
---|---|
callback | 実行する関数名を記述。 |
関数名 | callbackと同じ名前を記述。 |
処理 | 処理プログラム。必ずreturnで処理結果を返す。
アロー関数使用の場合、「{ }」に囲まれていない場合は値を表す式となります。 |
element | 配列で現在処理されている要素です。 |
index | 省略可。配列で現在処理されている要素のインデックスです。 |
array | 省略可。map が呼び出された配列です。 |
thisArg | 省略可。callback を実行するときに this として使用する値です。 |
処理 | 処理プログラム。 |
各要素がコールバック関数の結果であり、深さが 1 にフラット化された新しい配列。
コールバック関数の詳細な説明は Array.prototype.map() を参照してください。flatMap メソッドは、map の後に深さ 1 の flat() を呼び出すのと同じです。
reduce() と concat():
var arr = [1, 2, 3, 4]; D=arr.flatMap(x => [x, x * 2]); //=[1, 2, 2, 4, 3, 6, 4, 8] // 次も同様 D=arr.reduce((acc, x) => acc.concat([x, x * 2]), []); //=[1, 2, 2, 4, 3, 6, 4, 8]
ただし、これは非効率的であり、大きな配列の場合は避けるべきであることに注意してください。処理ごとにガベージコレクションが必要な新しい一時配列を作成し、要素を単に追加するのではなく、現在のアキュムレータ配列から新しい配列に要素をコピーします。
map() と flatMap():
let arr1 = [1, 2, 3, 4]; D=arr1.map(x => [x * 2]); //=[ [2], [4], [6], [8] ] D=arr1.flatMap(x => [x * 2]); //=[2, 4, 6, 8] // 1 つのレベルのみが平坦化されます arr1.flatMap(x => [[x * 2]]); //=[ [2], [4], [6], [8] ]
上記は map を使用することでも実現できますが、ここでは flatMap の使用方法をよりよく示す例を紹介します。
A=[1, 2, 3, 4]; function F(Ele, Idx){ alert(Idx) return Ele * 2 } D=A.flatMap(F); //=[2, 4, 6, 8 ]
A=[1, 2, 3, 4]; D=A.flatMap(function(Ele, Idx){ return Ele * 2 }); //=[2, 4, 6, 8 ]
A=[1, 2, 3, 4]; D=A.flatMap((Ele, Idx) => Ele * 2 ); //=[2, 4, 6, 8 ]