Обойдите вложенные массивы и увеличивайте счётчик для числовых значений. В заголовке сказано «целых», а в тексте — «числовых»: критерий следует выбрать явно.
Подсчёт всех целых элементов в вложенном массиве
Обойдите вложенные массивы и увеличивайте счётчик для числовых значений. В заголовке сказано «целых», а в тексте — «числовых»: критерий следует выбрать явно.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Дан массив, который может включать как числа, так и другие массивы произвольной глубины вложенности. Необходимо реализовать функцию, которая вернёт общее количество числовых значений, встречающихся в структуре любого уровня.
// Примеры:
// console.log(getCountNum([[[][]]])); // 0
// console.log(getCountNum([[0, [1, [5, [4, 3], 1], 1]])); // 7
// console.log(getCountNum([[[[1], 2], 3, 4, [1, [5, 3, 0, [6, 7]]]]]));
Ответ
Обойдите вложенные массивы и увеличивайте счётчик для числовых значений. В заголовке сказано «целых», а в тексте — «числовых»: критерий следует выбрать явно.
function getCountNum(array) {
const stack = [array];
let count = 0;
while (stack.length) {
const value = stack.pop();
if (Array.isArray(value)) {
for (const item of value) stack.push(item);
} else if (typeof value === 'number') count++;
}
return count;
}
Это вариант для всех значений типа number, включая NaN и Infinity. Для целых замените условие на Number.isInteger(value), для конечных чисел — Number.isFinite(value). Предполагаются конечные вложенные массивы без циклов. Примеры в условии содержат ошибки скобок; для [[0,[1,[5,[4,3],1],1]]] ответ действительно 7.