初學者問題:為什麼這個for迴圈回傳false?
P粉022723606
P粉022723606 2023-09-08 17:31:55
0
1
440

我正在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粉022723606
P粉022723606

全部回覆(1)
P粉575055974

它之所以有效,是因為它從最後開始

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"));
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!