首頁  >  問答  >  主體

初學者問題:為什麼這個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粉022723606407 天前420

全部回覆(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
  • 取消回覆