不使用endsWith()确认字符串的结尾

时间:2018-12-27 04:41:59

标签: javascript

目标:

检查字符串(第一个参数,str)是否以给定的目标字符串(第二个参数,target)结尾。可以使用.endsWith()方法解决此挑战,但我不想使用它。

可行的解决方案:

function confirmEnding(str, target) {   
  return str.slice(str.length - target.length) === target
}

console.log(confirmEnding("Open sesame", "game"));  // false

上面是“解决方案”。看到它多么简单之后,我感到沮丧!

但是,尽管我的代码很复杂,但我仍然希望它能解决。

下面是我的代码:

function confirmEnding(str, target){
  let newStr = str.split('').reverse()
  let newTarget = target.split('').reverse()
  function matching (newStr, newTarget){
    for (let i = 0; i < newTarget.length ; i++){
    return (newTarget[i] === newStr[i]) ? true : false
    }
  }
}

console.log(confirmEnding("Open sesame", "game"))

它打印true,但我希望它是false

  • 这很混乱;我想让循环继续下去,并在遇到错误时停止。.我该怎么做?
  • 此外,我不确定在函数末尾应在何处以及什么“返回代码”中添加。

3 个答案:

答案 0 :(得分:1)

这是您的代码存在的问题:

  1. 不需要嵌套函数
  2. 如果发现差异,则循环仅应返回false
  3. 如果循环没有发现差异,那么您可以返回true

function confirmEnding(str, target){
  let newStr = str.split('').reverse()
  let newTarget = target.split('').reverse()
  for (let i = 0; i < newTarget.length ; i++) {
    if (newTarget[i] !== newStr[i]) {
      return false;
    }
  }
  return true;
}

console.log(confirmEnding("Open sesame", "game"))
console.log(confirmEnding("Open sesame", "same"))

解决问题的更有效方法是使用正则表达式:

function confirmEnding(str, target) {
  return new RegExp(`${target}$`).test(str);
}

console.log(confirmEnding("Open sesame", "game"))
console.log(confirmEnding("Open sesame", "same"))

答案 1 :(得分:0)

可以使用正则表达式吗?如果您知道结尾的样子,则可以将regex与indexOf一起使用以进行验证。假设您使用的是JavaScript

答案 2 :(得分:0)

尝试一下。我在这里使用的代码对我来说更直观。

function confirmEnding(str, target) {
  let result = str.slice(-target.length);
  if (result === target) { 
    return true} else {
      return false}
}