[英]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.