【问题标题】:Reversing words in a string JS without using built in function在不使用内置函数的情况下反转字符串 JS 中的单词
【发布时间】:2019-04-24 13:43:47
【问题描述】:

如果不使用split reverse和join函数,怎么会做这样的事情?

给定的问题:反转字符串中的单词 示例输入:“Hello World” 示例输出:“World Hello”

<script>
  var newString = ""; 
  var theString = prompt("Enter a Phrase that you would like to reverse (Ex. Hello world)"); 

  newString = theString.split(" ").reverse().join(" ")


  document.write(newString);
</script>

【问题讨论】:

  • Reversing words in a string 的可能重复项不是基于 cmets 的重复项。 限制使用这些方法。这里有一些钉子。去找个螺丝刀把它们放进去……
  • 所以你需要避免使用splitreverse?
  • @Ben Aston 是的,这是限制之一
  • 可以使用 split + for 循环 + if 语句。拆分反向会好得多

标签: javascript join reverse string-split


【解决方案1】:

数组可以像开箱即用的堆栈一样使用。堆栈是 LIFO,这正是您所需要的。

function reverseWords(str) {
    var word, words, reverse;

    words = str.match(/(?:\w+)/g);
    reverse = '';
    while(word = words.pop()) {
      reverse += word + ' ';
    }

    return reverse.trim();
}

reverseWords('hello world');

或者使用调用栈作为你的栈:

function reverseWords(str) {
  var result = '';
  (function readWord(i = 0) {
    var word = '';
    if(i > str.length) {
        return '';
    }    
    while(str[i] !== ' ' && i < str.length) {
      word += str[i];
      i++;
    }    
    readWord(++i); // Skip over delimiter.
    result += word + ' ';    
  }());
  return result.trim();
}

reverseWords('hello world');

【讨论】:

    【解决方案2】:

    另一个反转字符串中单词的想法是使用堆栈数据结构。像这样:

    var newString = "";
    var theString = prompt("Enter a Phrase that you would like to reverse (Ex. Hello world)");
    
    var word = "";
    var c;
    var stack = [];
    for (var i = 0, len = theString.length; i < len; i++) {
      c = theString[i];
      word += c;
    
      if (c == " " || i == (len-1)) {
          word = word.trim();
          stack.push(word);
          word = "";
      }  
    }
    
    while (s = stack.pop()) {    
        newString += s + " ";
    }
    
    console.log(newString);
    

    【讨论】:

      【解决方案3】:

      你也可以试试这样:

      我想不出更短的解决方案。

        var newString = "";
        var theString = prompt("Enter a Phrase that you would like to reverse (Ex. Hello world)");
      
        theString.replace(/[^\s]*/g, function (value) {
            newString = value + ' ' + newString;
        });
      
        document.write(newString);

      【讨论】:

        【解决方案4】:

        在数以百万计的不同解决方案中,我能想到的最少的输入是使用lastIndexOfsubstring

        var str = "The quick brown fox",
            reversed = "",
            idx;
        
        while(true) {
            idx = str.lastIndexOf(" ")
            reversed = reversed + str.substring(idx).trim() + " "
            if (idx < 0) break;
            str = str.substring(0, idx)
        }
        reversed.trim()  # Oh, yes, trim too
        

        输出:

        "fox  brown  quick The"
        

        【讨论】:

          【解决方案5】:

          用 javascript 做的最简单的方法。这里 replace() 有 /,/g 它会将字符串中的所有逗号替换为空格。

              var msg = 'Hello world I am Programmer';
              var newstr = msg.split(" ").reverse().join().replace(/,/g, ' ');
              console.log(newstr)
          

          ;

          【讨论】:

            猜你喜欢
            • 2021-12-09
            • 1970-01-01
            • 2017-06-15
            • 1970-01-01
            • 1970-01-01
            • 2019-02-20
            • 1970-01-01
            • 2017-01-22
            • 2016-03-04
            相关资源
            最近更新 更多