我也是初学者,利用前面所学数组相关的知识以及题目的提示,我算是过关了,后来想,是不是还有其他的方法能破此题呢?搜索了一下,还是有不少的方法,这里把这些方法罗列一下,以备后面可以使用。
要做的事情
我们要做的事情:
将提供的字符串反向显示在反向字符串之前,需要将字符串转化成一个数组最终结果依旧是一个字符串
接下来,我们一起看看有哪些方法能实现上述要求。
使用内置函数
在练习题中,提示我们可以使用三种方法配合,能顺利让一个字符串反向显示:
String.prototype.split()Array.prototype.reverse()Array.prototype.join()
简单的过一下:
split()方法将一个字符串对象的每个字符拆出来,并且将每个字符串当成数组的每个元素reverse()方法用来改变数组,将数组中的元素倒个序排列,第一个数组元素成为最后一个,最后一个变成第一个join()方法将数组中的所有元素边接成一个字符串
来看个实例:
将上面的方法简化一下,可以写成这样:
使用一个递减循环遍历将字符串反转
这种方法使用的是一个for
循环给原字符串做一个递减遍历,然后将遍历的字符串重新合并成一个新字符串:
简单的看看字符串遍历的过程。假设需要将字符串"hello"反转。其整个遍历过程如下表所示:
i
的值
其实上面的for
循环,也可以换成while
循环:
在while
循环中substring()
方法。substring()
返回字符串两个索引之间(或到字符串末尾)的子串。
使用递归实现字符串反向
使用String.prototype.substr()
和String.prototype.charAt()
方法也可以将一个字符串反向。
substr()
方法返回字符串中从指定位置开始到指定长度的子字符串。比如:
charAt()
方法返回字符串中指定位置的字符。字符串中的字符从左向右索引,第一个字符的索引值为 0
,最后一个字符(假设该字符位于字符串 stringName
中)的索引值为 stringName.length - 1
。 如果指定的 index
值超出了该范围,则返回一个空字符串。
结合起来,我们可以这样做实现字符串反向:
第一部分的递归方法。你需要记住,你不会只调用一次,你将会有几个嵌套的调用。
第二部分的递归方法。
上面的方法还可以继续改良一下,改成三元操作符
还可以换成这样的方式
其他方法
除了上面的方法之外,其实还有其他一些方法:
方法一 代码如下:function reverseString (str) { var newString = []; for (var i = str.length - 1, j = 0; i >= 0; i--, j++) { newString[j] = str[i]; } return newString.join('');}reverseString("hello"); // => olleh
方法二 代码如下:function reverseString (str) { for (var i = str.length - 1, newString = ''; i >= 0; newString += str[i--] ) { } return newString;}reverseString("hello"); // => olleh
方法三 代码如下:function reverseString (str) { function rev(str, len, newString) { return (len === 0) ? newString : rev(str, --len, (newString += str[len])); } return rev(str, str.length, '');}reverseString("hello"); // =>olleh
方法四 代码如下:function reverseString (str) { str = str.split(''); var len = str.length, halfIndex = Math.floor(len / 2) - 1, newString; for (var i = 0; i <= halfIndex; i++) { newString = str[len - i - 1]; str[len - i - 1] = str[i]; str[i] = newString; } return str.join('');}reverseString("hello"); // => olleh
方法五 代码如下:function reverseString (str) { if (str.length < 2) { return str; } var halfIndex = Math.ceil(str.length / 2); return reverseString(str.substr(halfIndex)) + reverseString(str.substr(0, halfIndex));}reverseString("hello"); // =>olleh
方法六 代码如下:function reverseString(str) { return [].reduceRight.call(str, function(prev, curr) { return prev + curr; }, '');}reverseString("hello"); // =>olleh
ES6的方法
在ES6中,可以变得更为简单一些,如:
[...str].reverse().join('');
或[...str].reduceRight( (prev, curr) => prev + curr );
或者:
const reverse = str => str && reverse(str.substr(1)) + str[0];
字符串反转是一个小而简单的算法,前面也说了,常被用来面试JavaScript基础。你可以使用上面各种方法来解决这个问题,甚至使用更为复杂的解决方案。如果你有更好的方法,欢迎在下面的评论中补上,与我们一起分享。
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com