```js
const arr1 = [1, [2, [3, [4, 5]]]]
const extract = arr => {
return arr.reduce((p, c) => Array.isArray(c) ? [...p, ...extract(c)] : [...p, c], [])
}
const recover = (ori, target) => {
return ori.map(el => Array.isArray(el) ? recover(el, target) : target.pop())
}
const solution = (arr) => recover(arr, extract(arr))
console.log(JSON.stringify(solution(arr1)));
```