【问题标题】:Confirm the Ending of an String (Varying Ending Length)确认字符串的结尾(不同的结尾长度)
【发布时间】:2015-09-14 17:16:18
【问题描述】:

此任务要求您编写一个带有两个参数的函数。第一个参数是一个名为str 的字符串,第二个参数是一个我们的目标结尾名为target 的字符串。任务是验证str 的结尾是否与目标结尾相同。说明指示使用.substr() 方法将结尾与目标进行比较。我遇到的问题是.substr 方法将有多个起点和长度参数,因为目标结尾可以是可变长度。看看我解决这个问题的尝试,请指引我正确的道路。

function end(str, target) {
  var start = str.length - (target.length - 1);
  if(str.substr(start, str.length) == target){
     return true;
  } else {
     return false;
  }
}

end('Bastian', 'n');

【问题讨论】:

  • 如果var start = str.length - target.length;,您的代码应该可以正常工作
  • endsWith in javascript的可能重复
  • @torazaburo 不是 DUP:用户询问 说明指示使用 .substr() 方法将结尾与目标进行比较 ...这个问题不是关于 endWidth。
  • @oneway 好吧,问题在于人们对问题的解释有多狭隘。这个问题有一个更广泛的背景,即如何做相当于endsWith;它有一个更狭窄的背景,即如何以一种特定的次优方式做到这一点。恕我直言,它完全在合法答案的范围内,可以提出替代的、更好的方法来解决潜在问题。一个问题如果它提出相同的基本问题,则它是重复的,尤其是在这种情况下,建议作为重复的问题确实提供了一个基于正确实现的答案在substr.

标签: javascript string substring


【解决方案1】:

编辑

正如@torazaburo 所说。正确答案是:

function end(str, target) {
    return target === str.substr(str.length - target.length);
}

因为字符串确实以空字符串结尾

原始答案

function end(str, target) {
    return target.length > 0 && target === str.substr(str.length - target.length);
}

http://jsfiddle.net/tqsx0gLa/2/

来自评论: 此代码使用&& 运算符设置逻辑比较。左侧target.length > 0 应始终返回true 并带有有效的target 输入。左侧设置目标等于substr,从取str.lengthstr最右侧的位置)减去target长度(到达起点我们的子字符串)。不需要端点输入,因为子字符串将运行到str 的末尾。

【讨论】:

  • 这是正确答案。对于新人来说有一个解释会有所帮助,所以让我试一试。此代码使用“&&”运算符设置逻辑比较。左侧“target.length > 0”应始终返回“true”以及有效的“target”输入。左侧将目标设置为等于“substr”,从取“str.length”(“str”最右侧的位置)并减去“target”长度(到达我们的子字符串的起点)。不需要 en 点输入,因为子字符串将运行到 str 的末尾。
  • 为什么需要target.length > 0
  • 案例 4 应该返回 true。字符串确实以空字符串结尾。
【解决方案2】:

这是一个简单的解决方案:

function confirmEnding(str, target) {

  var result;

  //getting the last string depend on target length 
  var last = str.substring(str.length - target.length);   

  //checking the last string with the target
  if(last === target){ 

     result = true;

  } else {

   result = false;
  }

return result;
}

【讨论】:

    【解决方案3】:
    function end(str, target) {
      var start = str.length - target.length;
    
      if(str.substr(start) == target){
        return true;
      }
      else {
        return false;
      }
    }
    

    你也可以试试这个代码。

    【讨论】:

    • 你为什么不写return str.substr(start) == target;
    • 酷。我猜它更明确。但你的效率更高。
    【解决方案4】:

    substring 方法可以从字符串的末尾获取负值。你的问题的解决方法很简单:

    function end (str, target) {
      return str.substr(-target.length) === target;
    }
    
    end("simple is better", "better"); // returns true
    
    // which is the same as writing
    "simple is better".substr(-6) === "better" // true again
    

    【讨论】:

      【解决方案5】:

      我觉得这很简单:

      function end(str, target) {
        return str.substr(-target.length) == target;
      }
      

      【讨论】:

        【解决方案6】:

        我喜欢您的原始答案,它干净且易于准备。 尝试删除第 2 行上的 -1。这样它将返回 substr 中的所有 target 单词。

            function end(str, target) {
          var start = str.length - (target.length);
          if(str.substr(start) == target){
             return true;
          } else {
             return false;
          }
        }
        end ("He has to give me a new name", "name")
        

        当子字符串没有返回第二个参数时,它将从开始的数字返回到字符串的结尾。

        【讨论】:

          【解决方案7】:
          function confirmEnding(str, target) {
             var position = str.length - target.length; //get start position for our .substr method.....
          
             if (str.substr(position, target.length == target){ // logical expression wich tell our method(.substr) from which position we need get information then we compare result with our "target" argument.
               return true;
              } else { return false; }
          

          }

          confirmEnding("巴斯蒂安", "n"); // 是的

          【讨论】:

          • 添加一些细节以帮助理解问题以及此代码解决问题的原因。
          【解决方案8】:

          我的解决方案使用 substr 方法获取目标的长度,用减号为我们提供第一个字符串的最后一个字符以进行比较。

          const confirmEnding = (str, target) => str.substr(-target.length) === target ? 
                                                                                true : 
                                                                                false;
          

          【讨论】:

            【解决方案9】:

            给你:

            const solution = (str, target) => str.endsWith(target);
            

            最干净的方式。

            【讨论】:

              猜你喜欢
              • 2014-10-16
              • 1970-01-01
              • 1970-01-01
              • 2021-07-31
              • 2023-04-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-02-22
              相关资源
              最近更新 更多