【问题标题】:How to reverse string javascript without build in function..?如何在没有内置函数的情况下反转字符串 javascript..?
【发布时间】:2019-02-20 13:46:09
【问题描述】:

我想在没有内置函数的情况下反转字符串,例如 splitreversejoin,我已经尝试了这里的代码 @987654321 @ ,但我不太明白第四行的代码是做什么的,我需要在第四行进行更多解释。这是我的代码和一些解释

 function reverseString(str) {
  reverseIt = [];
  for (i = 0; i < str.length; i++) {
    reverseIt = str[i] + reverseIt; // the first way that works
    // reverseIt = str[i] + [];    // first.. i assume the variable "reverseIt" is equal to "[]", but the result from this line is not equal to the line above
    // reverseIt = str[i] + '';    // then i try this way with assume the variable reverseIt is empty string (""), but the result from this line not produce the expected result

    // var testing = [];             // and then  i try to make an empty array variable again
    // reverseIt = str[i] + testing; // and try to add the variable above, but this still not realy produce the expected result
    /*
      So the questions.., why the first way can works..?, what's actualy the code on that line do..?
    */
  }
  return reverseIt;
}
console.log(reverseString('Javascript'));

【问题讨论】:

    标签: javascript arrays node.js for-loop


    【解决方案1】:

    Javascript 将数组转换为字符串,“+”运算符被描述为here,所以我建议您使用空字符串作为reverseItreverseIt = ""; 第四行解释:

    • 您将原始字符串中的第一个字符连接到这个空(暂时)字符串reverseIt
    • 在下一次迭代中,reverseIt 将包含原始字符串的第一个字符,并将其与原始字符串的第二个字符连接起来。
    • 现在reverseIt 应该如下所示:str[1] + str[0]
    • 下一次迭代将str 的第三个字符添加到现有reverseIt,看起来像str[2] + str[1] + str[0]
    • 请注意,原始字符串中的字符被添加到reverseIt 字符串的前面, str[i] + reverseIt, 所以str后面的字符就是reverseIt前面的字符。
    • 希望我的解释清楚。

    【讨论】:

    • 感谢您的解释@TitianaD
    【解决方案2】:

    线

    reverseIt = str[i] + reverseIt;
    

    如果您考虑一下 for start、intermediate 和 end 索引的循环体执行的临时结果是什么样的,可能会变得更清楚:

    1。开始(i = 0)

    reverseIt === str[0] + reverseIt === str[0] + []
    

    这里有一个微妙但重要的细节,+ 会默默地将[] 的类型强制转换为字符串,即[] 将转换为''

    2。中级(0
    reverseIt === str[i] + reversetIt === str[i] + (str[i - 1] + ... + str[0] + [])
    

    3。结束(i = n - 1):

    reverseIt === str[n - 1] + reversetIt === str[n - 1] + (str[n - 2] + ... + str[0] + []) === str + []
    

    在不起作用的两行中,您正在删除累积的结果。所以对于每个索引

    reverseIt === str[i] + [] 
    

    分别

    reverseIt === str[i] + ''
    

    这意味着您将始终得到一个仅包含原始字符串(或空字符串)中最后一个字符的字符串。


    在旁注中,结合Array.fromArray.reduce,您可以在一行中得到结果:

    const reverse = (s) => Array.from(s).reduce((result, c) => `${c}${result}`, '');
    
    console.log(reverse('JavaScript'));

    【讨论】:

      【解决方案3】:

      字面意思是从第一个字符开始到结尾,每一步,在整个创建的字符串之前添加新字符

      例如对于名称david,它从一个空字符串开始,然后将每个字母推到系列的开头。 从无开始,然后d,然后在开头添加a,这将使ad,然后添加v成为vad,以此类推以结束divad

      -> 你对这段代码的尝试:

      reverseIt = str[i] + [];
      

      与原始代码不同。因为reverseIt[] 只是在开头! (请注意这里的[] 等于'',因为字符串只是一个字符串数组!所以这两种情况都包含。)

      一开始确实是[](或者'',这里没有区别),但是再往上一层,就变成了d!然后新的str[i]a,然后连接到reverseIt,现在是d,然后结果变成ad,将放入reverseIt!所以在这一步结束时,reverseIt 变量等于ad,而不是[]!并继续这样,直到整个字符串被反转。

      -> 你对这段代码的尝试:

      var testing = [];
      reverseIt = str[i] + testing;
      

      不正确,因为您实际上是在每一步重置反转的字符串,并且您没有将新字符串连接到已经创建的字符串,而是将其设置为最新的字符。所以一开始reverseIt[],然后变成d,然后变成a,然后变成v,以此类推,因为在每一步,它都等于str[i] + testing,因为testing 总是[],字面意思是这样的:reverseIt = str[i],所以最后,它只包含字符串的最后一个字符!

      【讨论】:

        【解决方案4】:

        如果您还不知道,基本上一个字符串就是它自己的一个字符数组。您可以像处理数组一样遍历字符串,并且每次迭代都会得到该字符串的单个字符。

        function reverseString(str) {
            var data="HELLO WORLD!";  // Test string
            var reverseIt ="";  // variable to save reversed string
            for(var i=data.length-1;i>=0;i--) // start the loop from last character and run it towards the first character
            {
                reverseIt +=data[i] // append current character to reverse variable
            }
            document.write(reverseIt ); // print reverse
        return reverseIt;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-09-20
          • 2021-12-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-14
          • 1970-01-01
          相关资源
          最近更新 更多