在 JavaScript 中的 replace() 方法中循环一个字符串



我有两个字符串,第二个字符串是从包含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) {...} 中传递的函数返回未定义

因此,charAt()隐式地将参数视为 0,因此返回第一个字母 "c">,给你 "cc2c";

最新更新