当一个字符串被传递给一个带有返回语句的函数时,你如何在JavaScript中反转它,而不使用内置函数(.reverse(), . charat()等)?
当前回答
使用Array函数,
String.prototype.reverse = function(){
return [].reduceRight.call(this, function(last, secLast){return last + secLast});
}
其他回答
下面是一个基本的ES6不可变的例子,没有使用Array.prototype.reverse:
//:: reverse = String ->字符串 const reverse = s => []. reduceright .使用实例调用(s, (a, b) => a + b) Console.log (reverse('foo')) // => 'oof' Console.log (reverse('bar')) // => 'rab' Console.log (reverse('foo-bar')) // => ' rabb -oof'
使用Array函数,
String.prototype.reverse = function(){
return [].reduceRight.call(this, function(last, secLast){return last + secLast});
}
只要你处理的是简单的ASCII字符,并且你很乐意使用内置函数,这就可以工作:
function reverse(s){
return s.split("").reverse().join("");
}
如果您需要一个支持UTF-16或其他多字节字符的解决方案,请注意这个函数会给出无效的unicode字符串,或者看起来很滑稽的有效字符串。你可以考虑一下这个答案。
[…s]是Unicode感知的,一个小的编辑给出:-
function reverse(s){
return [...s].reverse().join("");
}
有多种方法,你可以检查下面的,
1. 传统的for循环(递增):
函数reverseString (str) { let stringRev =""; For(令i= 0;我< str.length;我+ +){ stringRev = str[i]+stringRev; } 返回stringRev; } alert (reverseString(“Hello World !”);
2. 传统的for循环(递减):
函数反向字符串(str){ 让 revstr = “”; for(let i = str.length-1, i>=0, i--){ Revstr = Revstr+ str[i]; } 返回修订版; } alert(reverseString(“Hello World!”));
3.使用for-of循环
函数反向字符串(str){ 让 strn =“”; for(let char of str){ strn = char + strn; } 返回 STRN; } alert(reverseString(“Get Well soon”));
4. 使用forEach/高阶数组方法:
函数反向字符串(str){ 让 revSrring = “”; str.split(“”).forEach(function(char){ revSrring = char + revSrring; }); 返回转速Srring; } alert(reverseString(“Learning JavaScript”));
5. ES6标准:
函数反向字符串(str){ 让 revSrring = “”; str.split(“”).forEach(char => revSrring = char + revSrring); 返回转速Srring; } alert(reverseString(“Learning JavaScript”));
6. 最新的方式:
函数反向字符串(str){ return str.split(“”).reduce(function(revString, char){ 返回字符 + revString; }, ""); } alert(reverseString(“Learning JavaScript”));
7. 你也可以用下面的方法得到结果,
函数反向字符串(str){ return str.split(“”).reduce((revString, char)=> char + revString, “”); } alert(reverseString(“Learning JavaScript”));
没有内置方法?鉴于Javascript中的字符串是不可变的,您可能希望使用内置的方法,如split、join等。但这里有两种不使用这些方法的方法:
function ReverseString(str) {
var len = str.length;
var newString = [];
while (len--) {
newString.push(str[len]);
}
return newString.join('');
}
console.log(ReverseString('amgod')) //dogma
function RecursiveStringReverse(str, len) {
if (len === undefined)
len = str.length - 1;
if (len > 0)
return str[len] + RecursiveReverse(str, --len);
return str[len];
}
console.log(RecursiveStringReverse('Hello, world!'))// !dlrow ,olleH