结合起来,我们可以这样做实现字符串反向:
function reverseString(str) { if (str === "") {
return ""; } else {
return reverseString(str.substr(1)) + str.charAt(0); }
}reverseString("hello");
// =gt; olleh
第一部分的递归方法。你需要记住,你不会只调用一次,你将会有几个嵌套的调用。
| |
每次调用str === "#63;"
|
reverseString(str.subst(1))
|
+ str.charAt(0) 第一次调用 reverseString("Hello") reverseString("ello") + "h" 第二次调用 reverseString("ello") reverseString("llo") + "e" 第三次调用 reverseString("llo") reverseString("lo") + "l" 第四次调用 reverseString("lo") reverseString("o") + "l" 第五次调用 reverseString("o") reverseString("") + "o"
第二部分的递归方法。
|
每次调用
|
返回 第五次调用 reverseString("") + "o" = "o" 第四次调用 reverseString("o") + "l" = "o" + "l" 第三次调用 reverseString("lo") + "l" = "o" + "l" + "l" 第二次调用 reverserString("llo") + "e" = "o" + "l" + "l" + "e" 第一次调用 reverserString("ello") + "h" = "o" + "l" + "l" + "e" + "h"
上面的方法还可以继续改良一下,改成三元操作符
function reverseString(str) {
return (str === '') #63; '' : reverseString(str.substr(1)) + str.charAt(0);}
reverseString("hello");
// =gt; olleh
还可以换成这样的方式
function reverseString(str) {
return str reverseString(str.substr(1)) + str[0];
}reverseString("hello");
// =gt; olleh
其他方法
除了上面的方法之外,其实还有其他一些方法:
方法一复制代码 代码如下:function reverseString (str) { var newString = []; for (var i = str.length - 1, j = 0; i gt;= 0; i--, j++) { newString[j] = str[i]; } return newString.join('');}reverseString("hello"); // =gt; olleh
方法二复制代码 代码如下:function reverseString (str) { for (var i = str.length - 1, newString = ''; i gt;= 0; newString += str[i--] ) { } return newString;}reverseString("hello"); // =gt; olleh
方法三复制代码 代码如下:function reverseString (str) { function rev(str, len, newString) { return (len === 0) #63; newString : rev(str, --len, (newString += str[len])); } return rev(str, str.length, '');}reverseString("hello"); // =gt;olleh
方法四复制代码 代码如下:function reverseString (str) { str = str.split(''); var len = str.length, halfIndex = Math.floor(len / 2) - 1, newString; for (var i = 0; i lt;= halfIndex; i++) { newString = str[len - i - 1]; str[len - i - 1] = str[i]; str[i] = newString; } return str.join('');}reverseString("hello"); // =gt; olleh
方法五复制代码 代码如下:function reverseString (str) { if (str.length lt; 2) { return str; } var halfIndex = Math.ceil(str.length / 2); return reverseString(str.substr(halfIndex)) + reverseString(str.substr(0, halfIndex));}reverseString("hello"); // =gt;olleh
方法六复制代码 代码如下:function reverseString(str) { return [].reduceRight.call(str, function(prev, curr) { return prev + curr; }, '');}reverseString("hello"); // =gt;olleh
ES6的方法
在ES6中,可以变得更为简单一些,如:
[...str].reverse().join('');
或[...str].reduceRight( (prev, curr) =gt; prev + curr );
或者:
const reverse = str =gt; str reverse(str.substr(1)) + str[0];
字符串反转是一个小而简单的算法,前面也说了,常被用来面试JavaScript基础。你可以使用上面各种方法来解决这个问题,甚至使用更为复杂的解决方案。如果你有更好的方法,欢迎在下面的评论中补上,与我们一起分享。
(编辑:淮北站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!