初学者问题:为什么这个for循环返回false?
P粉022723606
P粉022723606 2023-09-08 17:31:55
0
1
458

我正在 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"));
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板