我有两个字符串,第二个字符串,从数组转换而来,包含NaN
个对象。我尝试使用NaN
方法将每个replace()
替换为第一个字符串中的字符。虽然循环遍历一个字符串在一个单独的函数中运行良好,但当我将它作为第二个参数插入到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
答案 0 :(得分:0)
更新:
由于您的评论,我更新了答案以符合您提到的标准。
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) {...}
中传递的函数返回undefined 。
所以charAt()
隐含地将参数视为0,因此返回第一个字母“c”,给你“cc2c”;