как сделать функцию/метод, которая считает вложенность массива ПРАВИЛЬНО?
calculateDepth([1, 2, 3, 4, 5]) => 1
calculateDepth([1, 2, 3, 4, 5, [1, []]]) => 3
calculateDepth ( arr ) {
let a = 0;
for(let i = 0; i < arr.length; i++){
a++;
arr = arr.reduce( (level, el) => {
if(Array.isArray(el)) level.push(...el);
return level;
}, []);
}
return a;
}
Он почти работает, но с помаркой, не считает пустые массивы (вроде).
Ответы (1 шт):
Автор решения: Zhihar
→ Ссылка
function calculateDepth(arr, depth = 0) {
max = depth;
for (let obj of arr){
if (Array.isArray(obj)) {
current = calculateDepth(obj, depth + 1);
max = current > max ? current : max;
}
}
return max;
}
на ваш пример выдаст 0 и 2 соответственно, поскольку первый массив никуда не вложен, а во втором примере вложенность имеет 2 уровня
от пустых массивов не зависит
Вот немного покороче:
function calculateDepth(arr, depth = 0) {
level = depth;
arr.forEach(obj => level = Array.isArray(obj) ? Math.max(calculateDepth(obj, depth + 1), level) : level);
return level;
}