当一个字符串被传递给一个带有返回语句的函数时,你如何在JavaScript中反转它,而不使用内置函数(.reverse(), . charat()等)?


当前回答

字符串本身是不可变的,但是你可以用下面的代码轻松地创建一个反向副本:

function reverseString(str) {

  var strArray = str.split("");
  strArray.reverse();

  var strReverse = strArray.join("");

  return strReverse;
}

reverseString("hello");

其他回答

使用Array函数,

String.prototype.reverse = function(){
    return [].reduceRight.call(this, function(last, secLast){return last + secLast});
}
var str = 'sample string';
[].map.call(str, function(x) {
  return x;
}).reverse().join('');

OR

var str = 'sample string';
console.log(str.split('').reverse().join(''));

//输出:“gnirts elpmas”

添加的反向字符串没有循环,它是通过递归工作。

函数反向(y) { 如果(y)。Length ==1 || . Length == 0){ 返回y; } 返回y.split(”)[y。长度- 1]+反向(y。片(0,y.length-1)); } console.log(反向(“Hello”));

只要你处理的是简单的ASCII字符,并且你很乐意使用内置函数,这就可以工作:

function reverse(s){
    return s.split("").reverse().join("");
}

如果您需要一个支持UTF-16或其他多字节字符的解决方案,请注意这个函数会给出无效的unicode字符串,或者看起来很滑稽的有效字符串。你可以考虑一下这个答案。

[…s]是Unicode感知的,一个小的编辑给出:-

function reverse(s){
    return [...s].reverse().join("");
}

下面的内容可能会帮助任何希望递归反转字符串的人。在最近的一次面试中,我被要求使用函数式编程风格:

var reverseStr = function(str) {
    return (str.length > 0) ? str[str.length - 1] + reverseStr(str.substr(0, str.length -   1)) : '';
};

//tests
console.log(reverseStr('setab retsam')); //master bates