为什么我的反向字符串缺少逗号? (Freecodecamp初学者算法ex.1)

时间:2017-04-30 21:36:44

标签: javascript algorithm

我正在进行Freecodecamp算法挑战,因为我是编程新手。问题陈述如下:

  

反转提供的字符串。您可能需要先将字符串转换为数组,然后才能将其反转。你的结果必须是一个字符串。

我已经接受了将字符串转换为数组的建议,但是输出有些问题。这是我的实施:

 function reverseString(str) {
   var myAr =  str.split("");
   newString = myAr.reverse().toString().replace(/,/g,"");
   return newString;
 }

这适用于某些字符串,例如hello world,但不适用于带逗号的字符串,例如hello, world!

我的预期输出为!dlrow ,olleh,但我得到!dlrow olleh

为什么我的代码失败了?我该怎么做才能克服这个问题?

1 个答案:

答案 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
  1. 您首先将此字符串拆分为一个字符数组:

    myAr = str.split(""); // evaluates to ["o", "n", "e", ",", " ", "t", "w", "o"]
    
  2. 然后,你反转数组:

    myAr.reverse() // evaluates to ["o", "w", "t", " ", ",", "e", "n", "o"]
    
  3. 接下来,将反转数组转换为字符串:

    myAr.reverse().toString() // evaluates to "o,w,t, ,,,e,n,o"
    
  4. 最后,删除所有逗号:

    myAr.reverse().toString().replace(/,/g,""); // evaluates to "owt eno"
    
  5. 您会看到将数组转换为字符串(步骤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