Количество элементов массива + всех массивов внутри массива
Каким способом можно посчитать количество элементов [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 шт):
Можно рекурсивно. Проверять является ли элемент массива массивом и если да, то передавать этот элемент аргументом... Если нет увеличивать счетчик.
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))
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([[[[[[[[[]]]]]]]]]));