压缩此代码

时间:2016-05-24 08:55:13

标签: javascript

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;
  } 
}

有人可以帮我压缩这段代码吗? 它工作正常,但我相信代码块可以减少。

感谢。

4 个答案:

答案 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.someArray.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}