JavaScript中的反向字符串

时间:2014-09-29 12:42:00

标签: 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]);
        }
    }
}

当我在新的字符串对象(" asd")上调用reverse方法时,它会产生以下输出:

  undefined 
    d 
    s 
    a

undefined来自哪里?你能帮我消除这个吗?

8 个答案:

答案 0 :(得分:3)

已解释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');

function ReverseString(string) {
  this.str = string;
  this.reverse = function() {
    var rev = this.str.split('').reverse();
    void(rev.map(function(v) {
     result.innerHTML += v + '<br>';
    }));
    this.reversed = rev.join('');
  };
}

var myReversed = new ReverseString('hello world');
myReversed.reverse();
&#13;
<div id="result"></div>
&#13;
&#13;
&#13;

答案 1 :(得分:2)

简单的步骤

'hello world'.split(' ').map(word=>word.split('').join('')).join(' ');

它将在原处反转每个单词

"olleh dlrow"

答案 2 :(得分:1)

一开始,size将为3(长度)。索引3没有任何内容,因此undefined。您需要在length-1启动它。

var size = this.str.length - 1;

答案 3 :(得分:0)

用户recusrsivity,最简单的方法

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

答案 4 :(得分:0)

我会使用reduceRight

function sum(arr) {
    return arr.reduceRight(function(result, chr) {
        return result += chr;
    });
}

现在我有一个方便的例程,我也可以用它来总结数字序列(按相反的顺序,但这并不重要)..对于字符串:

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

答案 5 :(得分:0)

size开头应为length -1。您可以将字符串反转与字符串打印混合使用,但是可以按以下步骤将其分开

let str = "Hello World!";
let r = [...str].reverse().join``;
console.log(r);

答案 6 :(得分:0)

以下是在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('');
}

使用拆分,反向和联接方法

function reverse2(str) {
  return str.split().reverse().join();
}

使用ES6 arroe函数和传播运算符进行复制以及将字符串转换为数组,然后反转并加入

reverse3 = str => [...str].reverse().join('');

调用这三个功能

console.log(reverse1("Hello World!"));
console.log(reverse2("Hello World!"));
console.log(reverse3("Hello World!"));

输出

!dlroW olleH
Hello World!
!dlroW olleH

答案 7 :(得分:0)

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

function ReverseString(string)     { 
this.str = string; 
var size = this.str.length;
this.reverse = function () {
 for(size; size >= 0; --size)  //loop from index value 3 to 0
{ console.log(this.str[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