首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我在javascript中的回文函数有问题。

我在javascript中的回文函数有问题。
EN

Stack Overflow用户
提问于 2016-03-30 11:47:17
回答 6查看 209关注 0票数 1

这是我的代码:这个函数适用于输入:“眼睛”,“赛车”,“不是回文”,“一个人,一个计划,一个运河。巴拿马”,“从不奇数或偶数”。但是,当输入为"almostomla“时,它返回"true”。谁能解释一下原因吗?

代码语言:javascript
复制
function palindrome(str) {

  var newStr = str.replace(/[^0-9a-zA-Z]/g, '');
  newStr = newStr.replace(/\s+/g, '');
  newStr = newStr.toLowerCase();
  var arr = newStr.split('');
  var arr2 =[];

  for(x = 0; x < arr.length; x++){
    arr2.push(arr[arr.length-1-x]);
  }

  for(y = 0; y < arr.length; y++){
    if(arr[y] == arr2[y]){
      return true;
    }
    else{
      return false;
    }
  }

}

palindrome("almostomla");
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2016-03-30 11:53:11

在去除噪音之后,我真的会像下面这样替换回文检查功能:

代码语言:javascript
复制
function palindrome(str) {
  var newStr = str.replace(/[^0-9a-zA-Z]/g, '');
  newStr = newStr.replace(/\s+/g, '');
  newStr = newStr.toLowerCase();
  var arr = newStr.split('');
  return arr.join('') == arr.reverse().join('');
}

alert(palindrome("almostomla"));
alert(palindrome("never odd or even"));

按预期工作。

为什么旧代码不能工作?

它只检查第一个正确的东西并返回true。您应该从那里删除return true。您的代码是,只要第一个字符和最后一个字符相同,就认为它是回文

所以你的代码,修正后的表格是:

代码语言:javascript
复制
function palindrome(str) {

  var newStr = str.replace(/[^0-9a-zA-Z]/g, '');
  newStr = newStr.replace(/\s+/g, '');
  newStr = newStr.toLowerCase();
  var arr = newStr.split('');
  var arr2 = [];

  for (var x = 0; x < arr.length; x++) {
    arr2.push(arr[arr.length - 1 - x]);
  }

  for (var y = 0; y < arr.length; y++) {
    debugger;
    if (arr[y] != arr2[y]) {
      return false;
    }
  }
  return true; // Place it here to return after the whole loop.
}

alert(palindrome("almostomla"));
alert(palindrome("never odd or even"));

票数 0
EN

Stack Overflow用户

发布于 2016-03-30 11:58:09

您只检查最后一个for循环中的第一个字符和最后一个字符。

代码语言:javascript
复制
for(y = 0; y < arr.length; y++){
    if(arr[y] == arr2[y]){ //if first and last chars equal you are returning true.
      return true;
    }
    else{
      return false;
    }
}

您应该检查所有字符,直到出现差异或结束为止。

代码语言:javascript
复制
for(y = 0; y < arr.length; y++){
    if(arr[y] != arr2[y]){
      return false;
    }
}

return true; --that means two arrays are same.
票数 1
EN

Stack Overflow用户

发布于 2016-03-30 11:50:36

您可以使用一个更简单的函数来检查一个单词是否是回文:

代码语言:javascript
复制
function checkPalindrom(str) {
    return str == str.split('').reverse().join('');
}

checkPalindrom("almostomla"); // false
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36307891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档