Heim  >  Fragen und Antworten  >  Hauptteil

Anfängerfrage: Warum gibt diese for-Schleife „false“ zurück?

Ich mache gerade ein paar Hausaufgaben in JS und habe eine Funktion geschrieben, die das Ende einer Zeichenfolge (str) vergleicht und true oder false zurückgibt, wenn sie mit der „Ziel“-Zeichenfolge übereinstimmt (dies könnte einfacher gemacht werden, aber diese hier habe ich ausgewählt so chaotisch):

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;

}

Diese Funktion funktioniert also, aber wenn ich sie mir ansehe, verstehe ich nicht, warum...

Wenn ich renne

confirmEnding("Testing123", "tin5123");

Mir scheint, dass es „true“ zurückgeben sollte, aber die for-Schleife ändert den Wert der Variablen „valid“ nach der vierten Iteration der for-Schleife nicht wieder in „true“? (Sollte die for-Schleife nicht auch 5, 6 und 7 durchlaufen und „true“ zurückgeben, um „valid“ zu erhalten?)

Die Antwort, die ich von OpenAI erhalten habe, ist, dass die Funktion prüft, ob „target“ mit dem Ende von „str“ übereinstimmt. Wie? Ich kann nirgends sehen, dass ich dafür eine konkrete Anleitung gegeben habe...

Wie entscheidet eine Funktion, welcher Wert der Rückgabevariablen „gültig“ ist? Durchläuft es alles und gibt nur „if: valid = true“ zurück, wenn ALLE i wahr sind? Warum?

Danke

P粉022723606P粉022723606407 Tage vor421

Antworte allen(1)Ich werde antworten

  • 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"));

    Antwort
    0
  • StornierenAntwort