Я понимаю, как работает следующая функция. НО почему он не выходит после первой итерации (когда есть палиндром)? Он проверяет первый символ против последнего в выражении if, который является истинным, что должно (в моей логике) выполнить оператор return... Спасибо за любую помощь, объясняющую это! :)
function palindrome(str) {
var lowerCaseStr = str.toLowerCase();
for (var i = 0; i < lowerCaseStr.length; i++)
debugger;
if (lowerCaseStr[i] === lowerCaseStr[lowerCaseStr.length - i - 1]){
return true;
}
return false;
}
Вам нужно переключить логику, проверить неравенство и вернуть false
. Если вы достигнете конца, верните true
.
function palindrome(str) {
var lowerCaseStr = str.toLowerCase();
for (var i = 0; i < lowerCaseStr.length; i++) {
debugger;
if (lowerCaseStr[i] !== lowerCaseStr[lowerCaseStr.length - i - 1]) {
return false;
}
}
return true;
}
true
становится false
и наоборот. вы выходите с первым найденным персонажем, но вам нужно проверить не сходство, а неравенство.
Он не выходит после первой итерации, но после итераций lowerCaseStr.length
потому что ваш код эквивалентен коду ниже
function palindrome(str) {
var lowerCaseStr = str.toLowerCase();
for (var i = 0; i < lowerCaseStr.length; i++){
debugger;
}
if (lowerCaseStr[lowerCaseStr.length] === lowerCaseStr[-1]){
return true;
}
return false;
}
то есть он выполняет lowerCaseStr.length;
но единственное, что он делает для каждой итерации, - это debugger
вызова, после чего он проверяет элементы в массиве, который не существует. (Оба индекса находятся за пределами границ). Это приводит к сопоставлению двух раз undefined
undefined === undefined
которые всегда верны.
В качестве бокового узла, если вы вернете либо true, либо false в зависимости от логического выражения, тогда вместо этого используйте один оператор return:
return (lowerCaseStr[i] === lowerCaseStr[lowerCaseStr.length - i - 1]);
debugger
.