Пара вещей, которые, по моему мнению, вызывают проблему:
- Вы просматриваете каждый символ в строке отдельно, а затем возвращаете либо true, либо false. Если ваша цель состоит в том, чтобы определить, содержит ли строка хотя бы одну заглавную букву, сначала вам нужно выполнить итерацию всей строки. Прямо сейчас, если ваш первый символ не в верхнем регистре, он не вернет true и поэтому мгновенно вернет false.
- Когда вы перебираете строку, вы нажимаете не-альфа-символы, такие как пробелы и знаки препинания. Если вы проверите, равен ли период «нижнего регистра» периоду «верхнего регистра», он оценивается как true, что может привести к ложному срабатыванию.
Решение: Я немного изменил функцию. Теперь он перебирает всю строку и использует регулярное выражение («регулярное выражение»), чтобы определить, является ли проверяемое значение действительно буквой. Если в нем встречается заглавная буква, счетчик увеличивается, что позволяет коду проходить всю строку. Мы используем логический оператор «&&» для выполнения двух логических проверок внутри нашей конечной функции if.
Как улучшить: Вы могли бы улучшить этот код, вернув true, как только счет увеличится выше 0, ноЯ оставлю это на ваше усмотрение, если хотите.
РЕДАКТИРОВАТЬ: переместил 2-й оператор If в цикл for, чтобы, как только условие было выполнено, оно возвращало true, вместо того, чтобы проходить весь циклстрока перед проверкой.
function isUpper(str) {
let count = 0;
for (let i = 0; i < str.length; i++) {
if (/[a-zA-Z]/.test(str.charAt(i)) && str.charAt(i) == str.charAt(i).toUpperCase()) {
count += 1;
}
if (count > 0) {
return true;
}
}
return false;
}
Дайте мне знать, если это поможет!