我正在 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粉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"));