[英]Why is my Palindrome code running true for every scenario?
This code returns true for every scenario;此代码对每个场景都返回 true; it returns true if it's a palindrome and it returns true if it's not a palindrome.
如果是回文则返回真,如果不是回文则返回真。
function isPalindrome(string){
string = string.toLowerCase();
var charactersArr = string.split(' ');
var validCharacters = 'abcdefghijklmnopqrstuvwxyz'.split(' ');
var lettersArr = [];
charactersArr.forEach(char => {
if (validCharacters.indexOf(char)> - 1) lettersArr.push(char);
});
return lettersArr.join(' ') === lettersArr.reverse().join(' ');
}
isPalindrome("Taco Cat");
function palindrome(str) {
var re = /[^A-Za-z0-9]/g;
str = str.toLowerCase().replace(re, '');
var len = str.length;
for (var i = 0; i < len/2; i++) {
if (str[i] !== str[len - 1 - i]) {
return false;
}
}
return true;
}
Use this code for checking palindromes.使用此代码检查回文。 You are complicating your code by passing in
var validCharacters = 'abcdefghijklmnopqrstuvwxyz'.split(' ');
您通过传入
var validCharacters = 'abcdefghijklmnopqrstuvwxyz'.split(' ');
使代码复杂化You could use re
like I have to include all possible combinations including numbers !你可以使用
re
就像我必须包括所有可能的组合,包括数字!
It always returns true
because lettersArr
is always empty.它始终返回
true
,因为lettersArr
始终为空。 Try to debug your code using debugger or just use console.log
for this purpose.尝试使用调试器调试您的代码,或者为此目的仅使用
console.log
。
I believe at least this line var charactersArr = string.split(' ');
我至少相信这一行
var charactersArr = string.split(' ');
is not doing what is expected: it splits a sentence by space characters into words instead of splitting into separate letters.没有做预期的事情:它通过空格字符将句子拆分为单词,而不是拆分为单独的字母。
It's because lettersArr
is always empty.... Try this code:这是因为
lettersArr
始终是空的......试试这个代码:
function isPalindrome(string) { let reversed = string.toLowerCase().split('').reverse().join(''); return reversed === string.toLowerCase() } let result1 = isPalindrome("Foo bar") let result2 = isPalindrome("mom") console.log(result1, result2)
lettersArr
is not what you expect. lettersArr
不是您所期望的。
You are splitting the input string by spaces, which means you get ['taco', 'cat']
and not ['t', 'a', 'c', 'o', 'c', 'a', 't']
.你用空格分割输入字符串,这意味着你得到
['taco', 'cat']
而不是['t', 'a', 'c', 'o', 'c', 'a', 't']
。
Then when this line runs:然后当这条线运行时:
if (validCharacters.indexOf(char)> - 1) lettersArr.push(char);
char
is 'taco'
which isn't found in validCharacters
, so nothing gets pushed into lettersArr
. char
是在validCharacters
中找不到'taco'
,因此没有任何内容被推入lettersArr
。
And since lettersArr
is empty:而且由于
lettersArr
是空的:
lettersArr.join(' ') === lettersArr.reverse().join(' ');
Becomes:变成:
[].join(' ') === [].reverse().join(' ')
Which, of course, it always true.当然,这总是正确的。
To fix it you simply want to split the string by an empty string, which gives you array of single character strings.要修复它,您只需要将字符串拆分为一个空字符串,这将为您提供单个字符串的数组。
function isPalindrome(string){ string = string.toLowerCase(); var charactersArr = string.split(''); var validCharacters = 'abcdefghijklmnopqrstuvwxyz'.split(''); var lettersArr = []; charactersArr.forEach(char => { if (validCharacters.indexOf(char)> - 1) lettersArr.push(char); }); return lettersArr.join(' ') === lettersArr.reverse().join(' '); } console.log("Taco Cat", isPalindrome("Taco Cat")); console.log("abc", isPalindrome("abc"));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.