js const arr = [1, 2, [3, 4, [5, 6]]]; // reduce と concat の再帰によって深いレベルを平坦化することができる function flatDeep(arr, d = 1) { if (!Array.isArray(arr)) { return arr; } return d > 0 ? arr.reduce((acc, val) => acc.concat(flatDeep(val, d - 1)), []) : arr.slice(); } flatDeep(arr, Infinity); // [1, 2, 3, 4, 5, 6] js // 再帰を使わずにスタックを使用して平坦化 // note that depth control is hard/inefficient as we will need to tag EACH v