Количество элементов массива + всех массивов внутри массива

Каким способом можно посчитать количество элементов [1, 2, [3, 4, [5]]], чтобы получилось семь. Другой пример: [[[[[[[[[]]]]]]]]] - должно получиться восемь. Я сегодня провёл примерно три часа, но так ничего и не добился.

function deepCount (a) {
    let count = 0
    count = count + a.length
    function inside (o) {
        return o.length
    }
    for (i in a) {
        if (typeof a[i] === 'object') {
            count = count + inside(a[i])
        }
    }
    
    console.log(count)
}

deepCount([1, 2, [3, 4, [5]]])

Вот всё, чего я достиг. Выдаёт шесть, но я не понимаю, как сделать рекурсию функции на саму себя, чтобы бесконечно проверяло, сколько массивов внутри.


Ответы (2 шт):

Автор решения: Rudi

Можно рекурсивно. Проверять является ли элемент массива массивом и если да, то передавать этот элемент аргументом... Если нет увеличивать счетчик.

let m = [1, 2, [3, 4, [5]]];
let count = 0;

function recursion(m) {
  for (const elem of m) {
    if (Array.isArray(elem)) {
      count++;
      recursion(elem);
    }else {
      count++
    }
  }
  return count
}
console.log(recursion(m))

→ Ссылка
Автор решения: Stanislav Volodarskiy

deepCount устроена так: в счётчик помещается длина массива. Затем перебираются элементы массива. Если какой-то из них тоже массив, к счётчику добавляется результат рекурсивного вызова deepCount:

const deepCount = a => {
    let c = a.length;
    for (const v of a) {
        if (Array.isArray(v)) {
            c += deepCount(v);
        }
    }
    return c;
};

console.log(deepCount([1, 2, [3, 4, [5]]]));
console.log(deepCount([[[[[[[[[]]]]]]]]]));

→ Ссылка