[英]Remove Last Character From String If It's a “!” Using For-Loop - JavaScript
我有
function remove(s) {
for (i = 0; i < s.length; i++) {
let lastChar = s.slice(-1);
if (lastChar === "!") {
s = s.substring(0, s.length - 1);
}
else {
return s;
}
}
return s;
}
失败的测试是:
Expected: '\\'isl\\'', instead got: '\\'isl!\\''
当(s)为"isl!!!!!"
时Expected: '\\'isl\\'', instead got: '\\'isl!\\''
我不知道为什么在这种情况下没有删除字符串中的最后一个字符。
只要有,它就应该删除字符串中的最后一个字符!
:
if (lastChar === "!") {
s = s.substring(0, s.length - 1);
}
我也尝试过:
s = s.replace("!", "");
但结果相同。 有任何想法吗?
因为您要增加i
并在每个循环中检查i < s.length
。 有时,您删除了!
(因此缩短了字符串),而i
等于s.length
而您从不检查最后一个字符。
没有理由为i
所有。 (或者是for
循环,但是如果这是挑战中的要求...)
如果使用调试器逐步解决问题,则会发现问题。 使用console.log
该版本还显示了问题:
function remove(s) { for (i = 0; i < s.length; i++) { let lastChar = s.slice(-1); if (lastChar === "!") { s = s.substring(0, s.length - 1); console.log(`i = ${i}, s = '${s}', s.substring(i) = '${s.substring(i)}'`); } else { console.log(`returning '${s}'`); return s; } } console.log(`returning '${s}' at end, because ${i} >= ${s.length}`); return s; } remove("isl!!!!!");
.as-console-wrapper { max-height: 100% !important; }
您无需使用for循环即可执行此操作。
const stringRemover (str) => {
if (str[str.length-1] === "!") {
return str.slice(0,str.length-1);
} else {
return str;
}
}
您可以创建一个递归函数,并使用CharAt
检查最后一个char是否为!
。 如果是这样,则再次调用相同的函数,但要使用删除最后一个字符串后创建的新字符串!
如果需要最后一个字符,则不确定为什么需要for
function remove(str) { let getLastChar = str.charAt(str.length - 1); if (getLastChar === '!') { return remove(str.substring(0, str.length - 1)) } else { return str; } } console.log(remove("isl!!!!!"));
这是代码战的结果
如上一个答复中所述,在for
循环的每次迭代中都会检查i < s.length
。 尝试这个 :
function remove(s) {
let a = s.length;
for (i = 0; i < a; i++) {
let lastChar = s.slice(-1);
if (lastChar === "!") {
s = s.substring(0, s.length - 1);
}
else {
return s;
}
}
return s;
}
@TJ Crowder向我指出了正确的方向,但是他没有提供符合我原始逻辑的答案(在这种情况下,我想使用一个for循环)。
关键要点是s = s.replace("!", "");
当i--
和s = s.replace(/!+$/g, '')
将在i++
时工作。 因为据我所知, replace()方法仅替换字符串的第一次出现,因此我们需要i--
强制循环向后遍历字符串,以确保每次出现"!"
被替换。
即这将工作:
function remove(s) {
for (i = 0; i < s.length; i--) {
let lastChar = s.slice(-1);
if (lastChar === "!") {
s = s.replace("!", '')
}
else {
return s;
}
}
return s;
}
这也将起作用:
function remove(s) {
for (i = 0; i < s.length; i++) {
let lastChar = s.slice(-1);
if (lastChar === "!") {
s = s.replace(/!+$/g, '');
}
else {
return s;
}
}
return s;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.