Есть массив:
var massiv = [11, [22], [[33]], [[[44]]]]
Мысль такая. Нужно получить массив вида:
[ [11, 0], [22, 1], [33, 2], [44, 3] ]
Или такого вида
[ [0, 11], [1, 22], [2, 33], [3, 44] ]
Задача
Нужно выложить все вложенные массивы на один уровень так, чтобы сохранялась очерёдность появления элементов как в оригинальном массиве, плюс чтобы каждому элементу оригинального массива присваивался уровень глубины.
Функция получения глубины каждого элемента массива
function elementDepth(array) { function extract(arr) { var newArr = []; for (i = 0, z = 0; arr[i] != undefined; i++, z++) { if (arr[i][1].constructor.name != "Array") { newArr[z] = arr[i] } else { newArr.push(...arr[i][1].map(e => [arr[i][0] + 1, e])); z += arr[i][1].length - 1; } } if(newArr.filter(i => i != undefined).length != newArr.length){ var g = newArr.map(i=>{if(i == undefined){return [-1, ""]} else {return i}}); return extract(g); } else if (newArr.filter(i => i[1].constructor.name == "Array").length > 0) { return extract(newArr); } else { return newArr; } } var x = array.map(i => [0, i]); return extract(x); }
Как работает функция?
В функцию elementDepth() мы передаём нужный нам массив. Затем мы делаем первичную трансформацию оригинального массива и создаём пары: нулевая глубина вложенности / элемент массива.
Из такого:
[111, [222, 333]]
Получаем такое:
[ [0, 111], [0, [222, 333]] ]
В таком виде подготовленный массив передаём во внутреннюю функцию-экстрактор. Это рекурсивная функция и она вызывает сама себя в том случае, если элементом подготовленного массива является массив.
Каждый вызов функции находит вложенные массивы и распаковывает их элементы наверх, передавая глубину вложенности.
Пример для тестирования
var massiv = [ 11, [22,,,,,"22"], [301, [33, "33"], 302], [400, [401, 402, [44, "44"]]] ]
Команда запуска функции
var ed = elementDepth(massiv)
Обратите внимание. В примере есть неопределённые элементы в виде запятых. Это сделано специально, чтобы показать как функция отрабатывает «несуществующие» элементы. Она возвращает пустую строку и присваивает глубину «-1». Элемент сохраняется в массиве, чтобы информировать разработчика о том, что оригинальный массив не полный.

Информационные ссылки
JavaScript | Как узнать глубину массива?
JavaScript | Как вытащить элементы массивов в массивах на один уровень?