как сделать функцию/метод, которая считает вложенность массива ПРАВИЛЬНО?

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; 
}
→ Ссылка