ОК, поэтому я пытаюсь улучшить свой JS, и я наткнулся на популярное упражнение по проверке Палиндрома.На этот раз это решение от freeCodeCamp должно работать очень хорошо, но я не могу понять некоторые его аспекты.
/this solution performs at minimum 7x better, at maximum infinitely better.
//read the explanation for the reason why. I just failed this in an interview.
function palindrome(str) {
//assign a front and a back pointer
let front = 0
let back = str.length - 1
//back and front pointers won't always meet in the middle, so use (back > front)
while (back > front) {
//increments front pointer if current character doesn't meet criteria
if ( str[front].match(/[\W_]/) ) {
front++
continue
}
//decrements back pointer if current character doesn't meet criteria
if ( str[back].match(/[\W_]/) ) {
back--
continue
}
//finally does the comparison on the current character
if ( str[front].toLowerCase() !== str[back].toLowerCase() ) return false
front++
back--
}
//if the whole string has been compared without returning false, it's a palindrome!
return true
}
Теперь у меня есть несколько вопросов относительно этого кода:
1-Какой смысл уменьшать длину str на 1?Я видел это в нескольких контролерах Palindrome, и все еще не могу обернуть голову вокруг него.
2 - означает ли метод .match «вернуть истину, если аргумент содержит эти символы»?
3- почему "/ [\ W _] /" равняется "всем символам"?
4- какой смысл добавлять 1 и вычитать 1 вперед и назад?Особенно в конце функции.
Спасибо и извините, если это глупый вопрос, я просто очень заинтересован в понимании логики здесь.