【问题标题】:How to implement a function that will return when an intense string is passed in, and false otherwise?如何实现一个函数,当传入一个强字符串时将返回,否则返回 false?
【发布时间】:2018-10-12 02:48:22
【问题描述】:

如果字符串以三个或更多结尾,则它们是密集的!分数。然而,拥有!标记除结尾以外的任何地方都会形成非密集字符串。

我遇到的问题是当有一个 !在一个字符串的中间。结果应该是假的,但它仍然是真。

我的代码:

function intenseString (str) {
  if (str.slice(-3) !== "!!!") {
    return false;
    } 
  else if(str.slice(str.indexOf("!"))){
    return false;
    }
  else if(str.slice(-3) === "!!!"){
    return true
  }
}

【问题讨论】:

    标签: javascript string function for-loop if-statement


    【解决方案1】:

    使用indexOf 而不是对字符串进行切片:

    const strings = ['abc!!!', 'abc!!de', 'abc!']
    
    const intenseString = (str, chars) => str.indexOf(chars) >= 0
    
    console.log(strings.map(x => intenseString(x, '!!!')))

    【讨论】:

      【解决方案2】:

      这是您的代码,为了便于阅读,对格式进行了一些调整:

      function intenseString(str) {
        if (str.slice(-3) !== '!!!') {
          return false;
        }
      
        if (str.slice(str.indexOf('!'))) {
          return false;
        }
      
        if (str.slice(-3) === '!!!') {
          return true;
        }
      }
      

      您能否给出一些返回true 的示例输入?我认为这永远不会返回true,因为第二个if 语句说“如果字符串中有任何!,则返回false,这是通过第一个if 暗示的。

      我相信您的意思是添加 + 1: if (str.slice(str.indexOf('!') + 1)) return false 表示“如果有任何 ! 不是字符串中的最后一个字符,则返回 false”,这仍然不起作用:第一个如果字符串不以!!! 结尾,if 语句将返回 false,这意味着到达第二个 if 语句的最小字符串是 !!!,并且在第一个 ! 之后总会有字符。

      另一种可能的尝试是仅检查最后三个字符 if (str.slice(0, -3).slice(str.indexOf('!') + 1)) return false 之前的字符串,除了最后包含超过 4 个! 的字符串之外,这几乎可以工作......(例如!!!!!)。

      我没有看到一种简单的方法(没有正则表达式来检查剩余的字符是否只有!)来使第二个if 语句在不循环字符串的情况下工作。

      请注意,您的最终if 是不必要的。你的前两个正在检查失败,如果它们通过它们,它必须是一个 strongString。如果超过第一个if,字符串也必须以!!! 结尾。


      这是一个潜在的解决方案,它遍历字符串中的每个字符,除了最后 4 个字符,如果有一个 ! 后面跟着不是 ! 的东西,则返回 false

      function intenseString(str) {
         if (!str.endsWith('!!!')) {
             return false;
         }
      
         for (let i = 0; i < str.length - 4; i++) {
             if (str.charAt(i) === '!' && str.charAt(i + 1) !== ('!')) {
                 return false;
             }
         }
      
         return true;
      }
      

      【讨论】:

        【解决方案3】:

        尝试以下方法之一:

        function intenseString(str) { return str.slice(-3) === '!!!'; }
        
        function intenseString(str) { return str.endsWith('!!!'); }
        
        function intenseString(str) { return /!{3}$/.test(str); }
        

        【讨论】:

          猜你喜欢
          • 2017-02-25
          • 2017-07-25
          • 2012-03-30
          • 2013-04-14
          • 1970-01-01
          • 1970-01-01
          • 2015-03-08
          • 1970-01-01
          相关资源
          最近更新 更多