tl;dr
Array.prototype.flat
とArray.prototype.flatMap
がES2019
から導入される。
サンプルコードを記載する。
Array.prototype.flatの例
Array.prototype.flatMapの例
Array.prototype.flat
の例
// このような多階層の配列があるとする
const array = [1,[2,[3]]];
// これをArray#flatすると
const arrayFlatten = array.flat(); // [1,[2,3]]
となる。
// もういちどやれば
arrayFlatten.flat(); // [1,2,3]
となる。
この、flatする回数は引数で指定可能で、デフォルトはの引数は1となっている。
const array2 = [4,[5,[6]]];
array2.flat(1); // [4,[5,6]]
array2.flat(2); // [4,5,6]
再帰的に実行し、全く平坦にする場合はこのようにする
const array3 = [7,[8,[9[10]]]];
array3.flat(Infinity); // [7,8,9,10]
Array.prototype.flatMap
の例
ここで、duplicateという関数を定義する。duplicateは、引数を複製し、配列に入れて返す関数とする。
const duplicate = x => [x, x];
// これを配列に適用すると次のようになる
[1,2,3].map(duplicate); // [[1,1],[2,2],[3,3]
// さらにflatする場合は、
[1,2,3].map(duplicate).flat(); // [1,1,2,2,3,3]
//とすればよいが、ここでflatMapの出番となる。
[1,2,3].flatMap(duplicate); // [1,1,2,2,3,3]