Javascript 不正确地返回true

Javascript 不正确地返回true,javascript,algorithm,Javascript,Algorithm,红细胞挑战赛7 有人能帮忙吗?下面的函数应该检查字符串中的每个字母是否都有“+”和两边,如果字母不以+”为界,则返回true和false。但是当我传递下面的字符串时,它传递true,当它应该是false时,因为k在右边没有a+。提前谢谢 str = '+f+++l+k=+' alpha = 'abcdefghijklmnopqrstuvwxyz' function SimpleSymbols(str) { str = str.toLowerCase() for (i=0 ; i<

红细胞挑战赛7

有人能帮忙吗?下面的函数应该检查字符串中的每个字母是否都有“+”和两边,如果字母不以+”为界,则返回true和false。但是当我传递下面的字符串时,它传递true,当它应该是false时,因为k在右边没有a+。提前谢谢

str = '+f+++l+k=+'

alpha = 'abcdefghijklmnopqrstuvwxyz'
function SimpleSymbols(str) {
  str = str.toLowerCase()
  for (i=0 ; i<str.length ; i++)  {

    if (alpha.indexOf(str.charAt(i)) > 0 && i === 0)  {
        return false 
    }
    else if (alpha.indexOf(str.charAt(str.length -1)) > 0) {
        return false 
    }
     else  if (alpha.indexOf(str.charAt(i)) > 0 && 
        (str.charAt(i-1) !== '+' || str.charAt(i+1) != '+')) {
         return false
    }
     else {return true}    
   }       
}

作为替代解决方案:

您可以使用以下逻辑:

计算字母的数量和两侧带+的字母的数量。如果两者相等,则返回true,否则返回false


作为替代解决方案:

您可以使用以下逻辑:

计算字母的数量和两侧带+的字母的数量。如果两者相等,则返回true,否则返回false


每次在第一次迭代时,您的函数都会中断for循环。您只需要在假分支上中断循环。然后只需在for循环后返回true,这意味着在该行之前它不会以false up退出。

您的函数每次在第一次迭代时都会中断for循环。您只需要在假分支上中断循环。然后在for循环后返回true,这意味着直到那一行它才以false up退出。

这个简单的逻辑如何

str = '+f+++l+k++'

function SimpleSymbols(str) {
  str = str.toLowerCase()
  for (i=0 ; i<str.length ; i++)  {
      if (str[i] === '+') {
          continue;
      }

      if (i === 0 || i === str.length - 1) {
          return false;
      }

      if (str[i - 1] === '+' && str[i].match(/[a-z]/) && str[i + 1] === '+') {
          i += 1;
          continue;
      } else {return false;}
  } 

  return true;
}

这个简单的逻辑怎么样

str = '+f+++l+k++'

function SimpleSymbols(str) {
  str = str.toLowerCase()
  for (i=0 ; i<str.length ; i++)  {
      if (str[i] === '+') {
          continue;
      }

      if (i === 0 || i === str.length - 1) {
          return false;
      }

      if (str[i - 1] === '+' && str[i].match(/[a-z]/) && str[i + 1] === '+') {
          i += 1;
          continue;
      } else {return false;}
  } 

  return true;
}

如果我们开始讨论替代方案,尽管正则表达式的解决方案要短得多,但使用string.split的版本更具可读性:

function SimpleSymbols(str){
     if(str.length === 0) return false;
     if(str[0] !== '+' || str[str.length-1] !== '+') return false;
     var subs = str.split('+');
     for(var i =0; i < subs.length; i++){
          if(subs.length > 1) return false;
     }
     return true;
}

如果我们开始讨论替代方案,尽管正则表达式的解决方案要短得多,但使用string.split的版本更具可读性:

function SimpleSymbols(str){
     if(str.length === 0) return false;
     if(str[0] !== '+' || str[str.length-1] !== '+') return false;
     var subs = str.split('+');
     for(var i =0; i < subs.length; i++){
          if(subs.length > 1) return false;
     }
     return true;
}

虽然这是一个简短而优雅的解决方案,但它并没有回答最初关于粘贴代码行为的问题。它没有要求另一种选择哈哈哈!沃瑟斯!你写了两行,花了我15行。美好的谢谢你的帮助,阿米特。@Anthony很高兴你发现它很有用:虽然这是一个简短而优雅的解决方案,但它并没有回答最初关于粘贴代码行为的问题。它没有要求另一种选择哈哈哈!沃瑟斯!你写了两行,花了我15行。美好的谢谢你的帮助,阿米特。@Anthony很高兴你发现它很有用:明白了,CyberDude!谢谢你的帮助,明白了,伙计!谢谢你的帮助,明白了,埃特沙姆!谢谢,知道了,埃特沙姆!谢谢,明白了,基里尔!谢谢,明白了,基里尔!谢谢