我正在进行Freecodecamp算法挑战,因为我是编程新手。问题陈述如下:
反转提供的字符串。您可能需要先将字符串转换为数组,然后才能将其反转。你的结果必须是一个字符串。
我已经接受了将字符串转换为数组的建议,但是输出有些问题。这是我的实施:
function reverseString(str) {
var myAr = str.split("");
newString = myAr.reverse().toString().replace(/,/g,"");
return newString;
}
这适用于某些字符串,例如hello world
,但不适用于带逗号的字符串,例如hello, world!
。
我的预期输出为!dlrow ,olleh
,但我得到!dlrow olleh
。
为什么我的代码失败了?我该怎么做才能克服这个问题?
答案 0 :(得分:3)
正如评论中已经指出的那样,'反向' String.split("")
的Array.join("")
是reverse-string-in-javascript-without-using-reverse,当输入字符串包含逗号时,它可以避免出现问题。
为什么myAr.reverse().toString().replace(/,/g,"")
会导致逗号出现问题?让我们看看当我们提供带逗号的字符串时会发生什么:
reverseString('one, two'); // returns "owt eno" - missing the comma
您首先将此字符串拆分为一个字符数组:
myAr = str.split(""); // evaluates to ["o", "n", "e", ",", " ", "t", "w", "o"]
然后,你反转数组:
myAr.reverse() // evaluates to ["o", "w", "t", " ", ",", "e", "n", "o"]
接下来,将反转数组转换为字符串:
myAr.reverse().toString() // evaluates to "o,w,t, ,,,e,n,o"
最后,删除所有逗号:
myAr.reverse().toString().replace(/,/g,""); // evaluates to "owt eno"
您会看到将数组转换为字符串(步骤3)等于用逗号连接所有元素。它与执行array.join(",")
相同。现在,通过从该字符串中删除所有逗号(在步骤4中),您遗憾地还删除了那些输入部分的逗号。没有办法区分真正的"通过加入数组引入的逗号(在步骤3中)。
我还建议进行一些命名更改,并使用newString
将当前全局变量var
声明为局部变量,或者立即返回它而不引入新变量:
function reverseString(string) {
var chars = string.split("");
return chars.reverse().join("");
}
console.log(reverseString("hello"));

如果您想避免使用内置的Array.reverse
功能,请查看此问题的答案:access members of the Master Page object