Question du débutant : pourquoi cette boucle for renvoie-t-elle false ?
P粉022723606
P粉022723606 2023-09-08 17:31:55
0
1
455

Je fais quelques devoirs en JS et j'ai écrit une fonction qui compare la fin d'une chaîne (str) et renvoie vrai ou faux si elle correspond à la chaîne "cible" (cela pourrait être fait plus facilement, mais celui-ci, je choisis d'une manière si chaotique) :

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;

}

Donc, cette fonction fonctionne, mais en y regardant, je ne comprends pas pourquoi...

Si je cours

confirmEnding("Testing123", "tin5123");

Il me semble qu'il devrait renvoyer true, mais la boucle for ne modifie pas la valeur de la variable "valid" en true après la quatrième itération de la boucle for ? (La boucle for ne devrait-elle pas également parcourir 5, 6 et 7 et renvoyer « vrai » pour obtenir « valide » ?)

La réponse que j'ai obtenue d'OpenAI est que la fonction vérifie si "target" correspond à la fin de "str". comment ? Je ne vois nulle part que j'ai donné des instructions spécifiques pour ce faire...

Comment une fonction décide-t-elle quelle valeur de la variable de retour est « valide » ? Est-ce qu'il parcourt tout et renvoie uniquement « if : valid = true » si ALL i est vrai ? Pourquoi?

Merci

P粉022723606
P粉022723606

répondre à tous(1)
P粉575055974

Ça marche parce que ça commence par la fin

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

Pourquoi s'embêter avec le bouclage ?

function confirmEnding(str, target) {
  return str.endsWith(target)
} 

console.log(confirmEnding("Testing123", "tin5123"));
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal