function palindrome(str) {
str = str.toLowerCase().replace(/\W/g,'');
var subStr = str.split(""),newStr = '',anotherStr = '';
for (var j = 0; j < subStr.length;j++){
if(subStr[j] === "_"){continue;}else{anotherStr += subStr[j];}}
for (var i = subStr.length - 1; i > -1;i--){
if(subStr[i] === "_"){continue;}else{newStr += subStr[i];}}
if (anotherStr === newStr) {
return true;
} else {
return false;
}
}
有人可以帮我压缩这段代码吗? 它工作正常,但我相信代码块可以减少。
感谢。
答案 0 :(得分:2)
一个简单的for循环,直到你检查了一半的字符串:
这将首先进行比较,最后一个,第二个,倒数第二个,...直到你到达字符串的中间,在这种情况下,它将停止循环,如果没有找到错误,则返回true。如果发现错误,它将立即返回false。
function palindrome(val) {
// If you only want to compare a-zA-Z0-9:
// val = val.replace(/[\W_]/g, '');
for(var i = 0; i < val.length/2; i++) {
if (val[i] != val[val.length - 1 - i]) {
return false;
}
}
return true;
};
超级天真的approch是使用:
function palindrome(val) {
val = val.replace(/\W_/g, '');
return val === val.split('').reverse().join('');
}
答案 1 :(得分:1)
你可以在没有任何循环的情况下完成。只需反转字符串即可比较它们。
function palindrome(str) {
str = str.toLowerCase().replace(/\W/g,'');
reverse = str.split('').reverse().join('');
return str === reverse;
}
答案 2 :(得分:1)
回文是一个单词,短语,数字或其他序列 向后或向前读取相同的字符。
使用Array.some
和Array.reverse
函数的简短解决方案:
function palindrome(str) {
str = str.toLowerCase().replace(/\W/g,'');
var forward = str.split(""), backward = forward.concat().reverse();
return !forward.some((v, k) => v !== backward[k]);
}
console.log(palindrome("Animal loots foliated detail of stool lamina")); // true
console.log(palindrome("not palindrome at all")); // false
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some
答案 3 :(得分:0)
有一种称为JS minifier的东西,它接受JavaScript代码并压缩它以节省内存。您可以使用此网站执行此操作:http://javascript-minifier.com/
以下是代码压缩的输出:
function palindrome(r){r=r.toLowerCase().replace(/\W/g,"");for(var e=r.split(""),n="",o="",t=0;t<e.length;t++)"_"!==e[t]&&(o+=e[t]);for(var a=e.length-1;a>-1;a--)"_"!==e[a]&&(n+=e[a]);return o===n?!0:!1}