Простой рекурсивный подход состоит в том, чтобы просто вызвать Array#reduce
и использовать Array#concat
, чтобы объединить каждый элемент в один результат, а также рекурсивно вызвать unpack_array
для элемента. Таким образом, вы обрабатываете вложенные массивы любой глубины:
function unpack_array(arr) {
if (!Array.isArray(arr)) return [arr];
return arr.reduce((acc, item) => acc.concat(unpack_array(item)), [])
}
console.log(unpack_array([1, [10, 30, 40,[34,53],4],2]))// -> [1,10,30,40,34,53,4,2]
Терминальное условие для рекурсии - если вы достигли элемента, который не является массивом. У вас нет для выполнения return [arr]
, в этом случае простой return arr
также работает, но он просто более последовательный - вы можете вызвать unpack_array(7)
и получить массив обратно.