首页  >  问答  >  正文

初学者问题:为什么这个for循环返回false?

我正在 JS 中做一些作业,并且我编写了一个函数来比较字符串 (str) 的结尾,如果它与“目标”字符串匹配,则返回 true 或 false(这可以更容易完成,但是这个我选择了这样的混乱方式):

function confirmEnding(str, target) {
  let valid = true;
  
console.log(str.length);
  console.log(target.length);

  for(let i = 0; i < target.length; i++){
    if (str.substring(str.length - (i+1)) == target.substring(target.length - (i+1))){
      valid = true;
    }
    else{
      valid = false;
    }
  }
  
  console.log(valid);
  return valid;

}

所以,这个函数确实有效,但是看着它,我不明白为什么......

如果我跑步

confirmEnding("Testing123", "tin5123");

在我看来它应该返回 true,但是 for 循环在 for 循环第四次迭代后并没有将变量“valid”的值更改回 true? (for 循环不应该也迭代 5、6 和 7 并返回“true”以获得“valid”吗?)

我从 OpenAI 得到的答案是该函数正在检查“target”是否与“str”的末尾匹配。如何?我看不到任何地方我已做出任何具体指示来执行此操作...

函数如何决定返回变量“有效”的哪个值?它是否会遍历所有内容,并且仅在 ALL i 为 true 时才返回“if: valid = true”?为什么?

谢谢

P粉022723606P粉022723606427 天前438

全部回复(1)我来回复

  • P粉575055974

    P粉5750559742023-09-09 10:28:32

    它之所以有效,是因为它从末尾开始

    function confirmEnding(str, target) {
      let valid = true;
    
      for(let i = 0; i < target.length; i++){
        console.log(str.substring(str.length - (i+1)), target.substring(target.length - (i+1)))
        if (str.substring(str.length - (i+1)) == target.substring(target.length - (i+1))){
          valid = true;
        }
        else{
          valid = false;
        }
      }
      
      return valid;
    
    } 
    
    console.log(confirmEnding("Testing123", "tin5123"));

    为什么还要麻烦循环呢?

    function confirmEnding(str, target) {
      return str.endsWith(target)
    } 
    
    console.log(confirmEnding("Testing123", "tin5123"));

    回复
    0
  • 取消回复