posted: 2019/05/05
lodashのflattenDeepをArray.prototype.flatで代用する
ES2019で追加された関数に
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/flat
Array.prototype.flat
がある。https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/flat
今までreduceでやってたようなflattenの処理が書き換えられる
// 今まではこんなやり方をやってたりした
const flatten = [1, [2, [3, [4]], 5]].reduce( (a, b) => [...a, ...b], [])
// => [1, 2, [3, [4]], 5]
// lodashならこう
_.flatten([1, [2, [3, [4]], 5]]);
// => [1, 2, [3, [4]], 5]
// それがこうできる
const flatten = [1, [2, [3, [4]], 5]].flat()
// => [1, 2, [3, [4]], 5]
flat
は引数としてdepth
を入れることができる。上記例だと1回しかflatしてないが、例えばこんなふうに記述できるconst flatten = [1, [2, [3, [4]], 5]].flat(2)
// => [1, 2, [3, [4]], 5]
そしてここで
flattenDeep
のように、どれだけdepthがあるかわからない場合はInfinity
が利用できるconst flatten = [1, [2, [3, [4]], 5]].flat(Infinity)
// => [1, 2, 3, 4, 5]