JavaScript
es6

JavaScript:多重配列をflatにする関数

ディープコピーと同様に考えるとflattenは:

  • 初期値[]のアキュムレータに配列の要素を順に連結していく(reduce)。
  • もし配列の要素が配列なら、要素をさらにflatにしてから連結(concat)。
  • そうでないなら要素をそのまま連結。

アロー関数で書くと:

const flatten =
  xs => xs.reduce(
      (acc, e) => Array.isArray( e ) ? acc.concat( flatten( e ) )
                                     : acc.concat( e )
      ,[]
    )
flatten([ 1, [ 2, 3 ], [ [ 4, 5 ], 6 ] ])
=> [ 1, 2, 3, 4, 5, 6 ]

参照:
Greedy flatten function for Array in JavaScript
function式で書かれている。中味は同じ。

あるいはスプレッド構文を使って

const flatten =
  xs => xs.reduce(
      (acc, e) => Array.isArray( e ) ? [...acc, ...flatten( e )]
                                     : [...acc, e ]
      ,[]
    )

こっちの方が直観的かも。見慣れれば。