How do you reverse a string in place in JavaScript?

前端 未结 30 2387
猫巷女王i
猫巷女王i 2020-11-22 00:29

How do you reverse a string in place (or in-place) in JavaScript when it is passed to a function with a return statement, without using built-in functions (.reverse()<

30条回答
  •  死守一世寂寞
    2020-11-22 00:48

    I know that this is an old question that has been well answered, but for my own amusement I wrote the following reverse function and thought I would share it in case it was useful for anyone else. It handles both surrogate pairs and combining marks:

    function StringReverse (str)
    {
      var charArray = [];
      for (var i = 0; i < str.length; i++)
        {
          if (i+1 < str.length)
            {
              var value = str.charCodeAt(i);
              var nextValue = str.charCodeAt(i+1);
              if (   (   value >= 0xD800 && value <= 0xDBFF
                      && (nextValue & 0xFC00) == 0xDC00) // Surrogate pair)
                  || (nextValue >= 0x0300 && nextValue <= 0x036F)) // Combining marks
                {
                  charArray.unshift(str.substring(i, i+2));
                  i++; // Skip the other half
                  continue;
                }
            }
    
          // Otherwise we just have a rogue surrogate marker or a plain old character.
          charArray.unshift(str[i]);
        }
    
      return charArray.join('');
    }
    

    All props to Mathias, Punycode, and various other references for schooling me on the complexities of character encoding in JavaScript.

提交回复
热议问题