Две вещи прямо вверх:
- Петли.
- Переменные.
Когда вы решаете проблему с помощью циклов и переменных, у вас теперь есть два проблемы.
Удалите встроенный console.log
, чтобы получить действительный счет как число.
Может быть более исчерпывающая или более умная проверка, чем эта, но вы можете легко изменить функцию isNum
, не затрагивая другой код.
Без циклов, без переменных и разделения проблем - isNum
logi c не смешивается с потоком управления.
Обновление: parseFloat
проверка в ответе Алекса является проверкой, которую вы ищете.
const isNum = maybeNum => (typeof maybeNum === 'number' || typeof +maybeNum === 'number') && !isNaN(+maybeNum) && maybeNum != '' && maybeNum != ' '
const countNumbers = arr => console.log(arr.filter(isNum).length)
countNumbers(['a','b','3','awesome','4']); // 2
countNumbers(['32', '55', 'awesome', 'test', '100']); // 3
countNumbers([]); // 0
countNumbers(['4','1','0','NaN']); // 3
countNumbers(['7', '12', 'a', '', '6', '8', ' ']); // 4
Вот версия с более умной проверкой из ответа Алекса. Редактор не поддерживает объединение nulli sh, поэтому вместо parseFloat(maybeNum) ?? false
вы должны сделать это, как будто это все еще 90-е годы:
parseFloat(maybeNum) || parseFloat(maybeNum) === 0
const isNum = maybeNum =>
parseFloat(maybeNum) ||
parseFloat(maybeNum) === 0
const countNumbers = arr => arr.filter(isNum).length
const test = arr => console.log(countNumbers(arr))
test(['a','b','3','awesome','4']); // 2
test(['32', '55', 'awesome', 'test', '100']); // 3
test([]); // 0
test(['4','1','0','NaN']); // 3
test(['7', '12', 'a', '', '6', '8', ' ']); // 4