FreeCodeCampChina / freecodecamp.cn

FCC China open source codebase and curriculum. Learn to code and help nonprofits.
https://fcc.asia/
Other
37.07k stars 1.38k forks source link

求教,如何解题 #574

Open promotion-xu opened 6 years ago

promotion-xu commented 6 years ago

Challenge Confirm the Ending%20%7B%0A%20%20%20%20%2F%2F%20%E4%B8%8D%E5%AD%98%E5%9C%A8%0A%20%20%20%20if(target%20%3D%3D%20str.substr(-1))%20%7B%0A%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%7D%0A%20%20%20%20%20%20return%20false%3B%20%20%0A%20%20%7Delse%7B%0A%20%20%20%20%0A%20%20%20%20var%20arr%20%3D%20str.split(%22%20%22)%3B%0A%20%20%20%20if(arr%5Barr.length%20-1%5D.indexOf(target)%20!%3D%20-1)%20%7B%0A%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%7Delse%7B%0A%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%7D%20%20%20%0A%20%20%7D%20%20%0A%7D%0A%0AconfirmEnding(%22Bastian%22%2C%20%22n%22)%3B%0A) has an issue. User Agent is: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36. Please describe how to reproduce this issue, and include links to screenshots if possible.

My code:

function confirmEnding(str, target) {
  // 请把你的代码写在这里
  if(str.indexOf(" ") === -1) {
    // 不存在
    if(target == str.substr(-1)) {
      return true;
    }
      return false;  
  }else{

    var arr = str.split(" ");
    if(arr[arr.length -1].indexOf(target) != -1) {
      return true;
    }else{
      return false;
    }   
  }  
}

confirmEnding("Bastian", "n");
S1ngS1ng commented 6 years ago

你的代码问题在于 "He has to give me a new name" split 之后最后一个元素是 "name",但用 indexOf("na") 检测还是会不为 -1,所以返回 true。但根据题意,这种情况应该是 false

另外也不应该写死 substr(-1),具体取多少要根据 target 长度来决定。

除此之外,也可以用正则解决。

详细解释:http://singsing.io/blog/fcc/basic-confirm-the-ending/

printlnlb commented 5 years ago

return str.substring(str.length-target.length) == target ? true:false;

tlviviana commented 5 years ago

function confirmEnding(str, target) { // 请把你的代码写在这里 var targetLength = target.length; var check = str.substr(str.length-targetLength,targetLength); if(check === target){ return true; }else{ return false; } }