Anfängerfrage: Warum gibt diese for-Schleife „false' zurück?
P粉022723606
P粉022723606 2023-09-08 17:31:55
0
1
453

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粉022723606
P粉022723606

Antworte allen(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"));
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage