Panda Noir

JavaScript の限界を究めるブログでした。最近は幅広めに書いてます。

どんな深さの配列も1次元配列にする

ES2019でArray#flatMapが導入されたので、それを使ってどんな深さの配列でも1次元にする方法を紹介します。

flatMapの仕様

flatMapはつぎのような関数です。

[1,2,3].flatMap(n => [n,-n]); // [1,-1,2,-2,3,-3]

つまり、mapしてからflatをかけるというメソッドです。

flatMapを使って1次元にする

const arr = [1, [2, [3, 4, [5]]]];

const flatInf = item => {
    if (Array.isArray(item))
        return item.flatMap(flatInf);
    return item;
};

console.log(arr.flatMap(flatInf)); // [1, 2, 3, 4, 5]

flatInfの動作

flatInfは、まず配列の各要素を「1次元の配列あるいは要素」にして、できた配列をflatします。1次元の配列にする部分は再帰的にflatInfを適用することで解決しています。