JavaScript中的反向字符串

JavaScript中的反向字符串,javascript,Javascript,我编写了一个JS构造函数,可以反转字符串变量: function ReverseString(string) { this.str = string; var size = this.str.length; this.reverse = function () { for(size; size >= 0; --size) { console.log(this.str[size]); } } } 当我对

我编写了一个JS构造函数,可以反转字符串变量:

function ReverseString(string) {
    this.str = string;
    var size = this.str.length;
    this.reverse = function () {
        for(size; size >= 0; --size) {
            console.log(this.str[size]);
        }
    }
}
当我对新字符串对象(
“asd”
)调用反向方法时,它会生成以下输出:

  undefined 
    d 
    s 
    a

未定义的
来自何处?你能帮我消除这个吗

开始时,
大小将是3(长度)。索引
3
中没有任何内容,因此
未定义。您需要在
length-1
处启动它

var size = this.str.length - 1;

用户可重复性,最简单的方法

function reverse(str){
     if (str.length == 0){ 
        return '';
     }
     return reverse(str.slice(1)) + charAt(0);
}

length
问题已经解释过了。要解决此问题,您可以使用:

function ReverseString(string) {
    this.str = string;
    var size = this.str.length;
    this.reverse = function () {
        while(size--) {
            console.log(this.str[size]);
        }
    }
}
反转字符串的另一种(更简单的方法)是将其拆分为一个数组,反转该数组,然后再次连接:

somestring.split('').reverse().join('');
应用于您的方法,类似于以下代码段:

var result=document.querySelector('#result');
函数反向限制(字符串){
this.str=字符串;
this.reverse=函数(){
var rev=this.str.split(“”).reverse();
无效(修订地图(功能(v)){
result.innerHTML+=v+'
'; })); 此值为反向=反向连接(“”); }; } var myReversed=newreversestring('helloworld'); myReversed.reverse()
我会使用
还原灯

function sum(arr) {
    return arr.reduceRight(function(result, chr) {
        return result += chr;
    });
}
现在我有了一个方便的例程,我也可以用它来对数字序列求和(按相反的顺序,但这并不重要)。。对于字符串:

function reverse_string(str) {
    return sum(str.split(''));
}

开头的
大小
应为
长度-1
。您可以将字符串反转与字符串打印混合使用,但可以按如下方式将其分离

let str=“你好,世界!”;
让r=[…str].reverse().join`;
控制台日志(r)这里有三种在javascript中反转字符串的方法
以相反的顺序遍历字符串并将字母推送到数组,然后加入数组

function reverse1(str) {
  if(!str || str.length < 2 || typeof str !== "string") {
    return new Error("Not a valid input");
  }
  const backwards = [];
  for (let i = str.length; i > -1; i--) {
    backwards.push(str[i]);
  }
  return backwards.join('');
}
使用ES6 arroe函数和spread运算符将字符串复制并转换为数组,然后反转并连接

reverse3 = str => [...str].reverse().join('');
调用这三个函数

console.log(reverse1("Hello World!"));
console.log(reverse2("Hello World!"));
console.log(reverse3("Hello World!"));
输出
这个简单的步骤怎么样

'hello world'.split(' ').map(word=>word.split('').join('')).join(' ');
它会将每个单词颠倒过来

"olleh dlrow"

在这里,您得到了'string'构造函数参数的大小,并减少了给定单词的长度('size'变量)

但问题是,当您输入单词“asd”时,该字符串的长度是3。因此,当您访问str[3]的索引时,应该是未定义的。因为

    index[0] --> a
    index[1] --> s
    index[2] --> d
    index[3] --> undfined
所以,您的代码应该更改

function ReverseString(string)   { this.str = string; 
var size = this.str.length; 
this.reverse = function () {
 for(size; size > 0; --size) //loop from index value 2 to 0
 { console.log(this.str[size - 1]);
 } 
}
}
所以,输出应该是这样的

    index[0] --> a
    index[1] --> s
    index[2] --> d

字符串中的字符索引范围从零到字符串长度减1。此外,为了防止您不想重新发明轮子,
str.split(“”)。reverse().join(“”)是一个有用的习惯用法。可能与just好奇重复,你发明一种全新的物体
ReverseString
的原因是什么?它的唯一目的就是扭转它所持有的字符串?你打算一次又一次地颠倒它吗?让我看看,在发布这个问题之前,你搜索了“反转字符串javascript”,但我猜没有找到任何东西。似乎以前没有人有过这个问题。除了(请参阅下面的重复答案)和非现场资源,例如。我认为更好的办法是修复循环中的条件或为变量指定不同的名称。我不喜欢名为
size
的变量,它实际上不是字符串的大小(长度)。我同意
size
不是最好的名称,但名称不是最重要的。逻辑是这样的。当然,好的名称也会有所帮助。一个名为
size
的变量,它实际上不是某个事物的大小,对我来说听起来非常不合逻辑。与其使用
str.substring(1,str.length)
,不如使用
str.slice(1)
。您还缺少了
if
子句的parens。我不认为OP在寻找替代实现,而是在问为什么它们的实现会产生一些意外的结果。谢谢,更改:)我现在正在使用delphi,以前编写时没有parens x)@MattBurland-Yup,只是给出了另一个更快的解决方案。可重复性是有用的:3
    index[0] --> a
    index[1] --> s
    index[2] --> d
    index[3] --> undfined
function ReverseString(string)   { this.str = string; 
var size = this.str.length; 
this.reverse = function () {
 for(size; size > 0; --size) //loop from index value 2 to 0
 { console.log(this.str[size - 1]);
 } 
}
}
    index[0] --> a
    index[1] --> s
    index[2] --> d