javascript - JS : Reversing a string using nested loop does not work

标签 javascript arrays string nested reverse

我编写了一个名为 reverseStr 的函数,它接受一个字符串作为参数并返回该字符串,但字符相反。

例如: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"),它会返回bbbbbbbb。 有人看到代码有问题吗?

注意:我不想使用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循环。迭代一次并以相反的顺序获取字符,如下所示:

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>

关于javascript - JS : Reversing a string using nested loop does not work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46637182/

相关文章:

javascript - 在 Javascript 中使用 parseFloat 添加时结果不正确

javascript - 我无法让循​​环工作数据已加载

javascript - 如何为每个有大写字母的单词添加不同的颜色?

mysql - 通过 CSV 将 JSON 字符串导入 MySQL。是好是坏?

C str 函数和 malloc

c - 反转输入字符串

javascript - 无法检测数组中 undefined object

javascript - 如何提前打破 promise 链以在 Express 中发送错误?

javascript - 包含()不为子字符串返回true

c++ - C++ 2013 中的 Dll 需要将字符串返回给 VB.net