JS:使用嵌套循环反转字符串不起作用

JS: Reversing a string using nested loop does not work

我编写了一个名为 reverseStr 的函数,它接收一个字符串作为参数,returns 接收字符串,但字符是相反的。

例如:reverseStr('bootcamp'); => 'pmactoob'

以下是我的程序:

function reverseStr(str)
{
 var splitStr = str.split("");
 console.log(splitStr);
 var reverseString = [];
 for(var i = 0; i <= splitStr.length -1 ; i++)
 {
  for(var j = splitStr.length - 1; j >= 0; j--)
  {
   reverseString[i] = splitStr[j]
  }
 }

 return reverseString.toString().replace(/[&\/\#,+()$~%.'":*?<>{}]/g, '');
}

如果我运行函数reverseStr("bootcamp")它returnsbbbbbbbb。 有人看到代码有问题吗?

注意:我不想使用 REVERSE() 内置功能

然而,我发现以下代码成功了但仍然需要我最初问题的答案

function reverseStr(str)
{
 var splitStr = str.split("");
 reverseStr = "";
 for(var i = splitStr.length - 1; i >= 0 ; i = i - 1)
 {
  reverseStr += splitStr[i];
 }

 return reverseStr;
}

问题是您的嵌套 for 循环在 returns 到外部 for 循环之前运行了整个过程。因此,它只是重复一个字符,次数等于长度。不用另一个 for 循环,只需在外部 for 循环中为 j 添加一个简单的计数器,例如 j++,并将该值与 i 值一起使用。

您不需要对字符进行两次迭代,即不需要嵌套 for 循环。迭代一次并以相反的顺序获取字符,如下所示:

function reverseStr(str)
{
    var splitStr = str.split("");
    console.log(splitStr);
    var reverseString = [];
    for(var i = 0, j=splitStr.length-1; i <= splitStr.length -1 ; i++, j--)
    {
            reverseString[i] = splitStr[j]
    }

    return reverseString.toString().replace(/[&\/\#,+()$~%.'":*?<>{}]/g, '');
}

你可以看到这里的循环持续了 i <= splitStr.length -1,即字符串的长度。这足以获得镜像字符(iArray.length-i)。

这里是一个演示的工作片段:

var reverseStr = function(str) {
  let result = String();
  for(let i = str.length-1; i >= 0; i--) {
    result += str.charAt(i);
  }
  return result.replace(/[&\/\#,+()$~%.'":*?<>{}]/g, '');
}
$('button').click(function() {
  $('.result').text(reverseStr($('#str').val()));
});
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input type="text" id="str">
    <button>Reverse it</button>
    <div class="result"></div>

也许更优雅的方法(除了 Array.prototype.reverse() 之外)是使用 String.prototype.chatAt()。这将避免与数组之间的两次转换,并为您节省一个变量。诚然,代码更短、更明显。

var reverseStr = function(str) {
  let result = String(); // An empty string to store the result
  for(let i = str.length-1; i >= 0; i--) { // Iterate backwards thru the chars and add to the result string
    result += str.charAt(i);
  }
  return result.replace(/[&\/\#,+()$~%.'":*?<>{}]/g, ''); // Original return method of the author
}
$('button').click(function() {
  $('.result').text(reverseStr($('#str').val()));
});
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input type="text" id="str">
    <button>Reverse it</button>
    <div class="result"></div>

对于原发布者,考虑一下:

如果您知道原始字符串的长度,那么您就知道原始字符串中最后一个位置的偏移量。

以相反顺序遍历原始字符串,将当前位置的值附加到新字符串。新字符串将与原始字符串相反。

Aydin 的例子基本上是正确的。这是我非常相似的版本,带有评论:

function reverseString(inputString) {
    // create a new empty string
    var newString = "";

    // iterate through the characters of the string in reverse order,
    // appending to the new string
    for (var i = inputString.length - 1; i >= 0; i--) {
        newString += inputString[i];
    }

    return newString;
}

console.log(reverseString('bootcamp'));