簡體   English   中英

在JavaScript中的replace()方法內循環字符串

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM