Как посчитать все символы верхнего регистра в строке?

Я остановился на функции, которая должна была считать верхние буквы в строке. Но вместо этого счетчик показывает 0, и я понятия не имею, где я сделал ошибку.

const bigLettersCount = (str) => {
  let result = 0;
  for (let i = 0; i < str.length; i += 1) {
    if (str[i].toUpperCase() === str[i]) {
    result += i;
    }
    return result;
   }
  }
  bigLettersCount('HeLLo')

person Markus    schedule 15.03.2020    source источник
comment
Вы возвращаетесь после первой итерации цикла. Также вы увеличиваете свой счет на i, а не на 1.   -  person Andreas Zita    schedule 15.03.2020


Ответы (3)


Я обновил ваш код, как показано ниже. Это будет работать.

const bigLettersCount = (str) => {
let result = 0;
for (let i = 0; i < str.length; i += 1) {
  if (str[i].toUpperCase() === str[i]) {
    result++;
  }
}
return result;
}
person Aravindan Venkatesan    schedule 15.03.2020

Вы можете использовать regex, чтобы сделать то же самое.

const str = 'HeLLo';

console.log(
  (str.match(/[A-Z]/g) || '').length
)

person Pranav C Balan    schedule 15.03.2020
comment
Эта форма письма для меня новая и я ее не понимаю. Есть ли способ улучшить мою функцию с помощью метода цикла? - person Markus; 15.03.2020
comment
@Markus: это просто извлечение всех одиночных заглавных символов из строки в массив и проверка длины - person Pranav C Balan; 15.03.2020

Вы можете использовать charCodeAt(). и если он находится между 65 (A) и 90 (Z), это означает, что это заглавная буква:

const bigLettersCount = (str) => {
  let result = 0;
  for (let i = 0; i < str.length; i += 1) {
    if (str.charCodeAt(i) > 64 && str.charCodeAt(i) <91 ) {
      result += 1;
    }
   }
   return result
  }
  
console.log(bigLettersCount('HeLLo'))

person Mhmdrz_A    schedule 15.03.2020