[英]looping a string inside replace() method in JavaScript
我有兩個字符串,第二個字符串是從包含NaN
對象的數組轉換而來的。 我嘗試使用replace()
方法用第一個字符串中的字符替換每個NaN
。 盡管在一個單獨的函數中遍歷字符串是很不錯的,但是當我將其作為replace()
方法的第二個參數插入時,它僅給我第一個字符串的第一個字符。 我應該改變什么?
這是單獨的功能,可以正常工作:
function proceed(str){
var newStr ='';
for (i = 0; i < str.length; i++) {
console.log(newStr += str[i]);
}
return newStr;
}
proceed('ab2c');
/* Output: */
// a
// ab
// ab2
// ab2c
但是,當我將其插入replace()
方法時,我得到了不正確的結果(存儲在變量result
) :
let ReverseMe = function (parameter) {
let extractedString = parameter.replace(/[^a-z]/gi, "");
let extractedStringArray = extractedString.split("");
extractedStringArray.reverse();
let joinedExtracted= extractedStringArray.join();
let newArray = parameter.split("");
let mixedArray = newArray.map(Number);
let joinedMixed = mixedArray.join();
let result = joinedMixed.replace(/NaN/g,
joinedExtracted.charAt(function (str) {
var newStr ='';
for (i = 0; i < str.length; i++) {
newStr += str[i];
}
}));
console.info(result);
}
ReverseMe('ab2c');
// Output: c,c,2,c
// Expected: cb2a
更新:
根據您的評論,我更新了答案以適合您提到的標准。
function reverseMe(string) { var chars = string.split(''); var array = chars.map(Number); chars = chars.filter(char => isNaN(Number(char))); return array.map(item => isNaN(item) ? chars.pop() : item).join(''); } var theString = reverseMe("ab2c"); console.log(theString); // → cb2a console.log(reverseMe("1abc2zyx3w")); // → 1wxy2zcb3a console.log(reverseMe("a1b2c")); // → c1b2a
舊答案:
如果到目前為止,您的意圖只是反轉字符串,則可以非常簡單地進行操作,如下所示:
function reverseMe(string) {
var newString = '';
for (var i = string.length - 1; i >= 0 ; i--) {
console.log(newString += string[i]);
}
return newString;
}
var theString = reverseMe("ab2c");
// → c
// → c2
// → c2b
// → c2ba
console.log(theString);
// → c2ba
但是,在您的代碼中,問題在於joinedExtracted.charAt(function(str)...
沒有獲得任何數字作為參數,因為在參數function(str) {...}
傳遞的function(str) {...}
返回undefined 。
因此charAt()
隱式認為參數為0,因此返回第一個字母“ c” ,為您提供“ cc2c”;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.