2015-08-25 69 views
0

我试图接受一个字符串(str)作为输入,然后返回该字符串反向。 (现在它将返回一个数组,因为我没有将输出转换为字符串)我的问题是我不断收到错误TypeError:newString.push不是函数。我将newString声明为一个数组,并试图将元素推入它。我不明白我做错了什么。Javascript - TypeError:newString.push不是函数

function FirstReverse(str) { 
     var newString = [ ]; 
     var eachLetter = str.split(""); 
     for(i = eachLetter.length; eachLetter.length >= 0; i - 1){ 
     newString =+ newString.push(eachLetter[i]);  
    } 
    return newString; 
} 

回答

3

newString = + something

算术运算会变成newString成多个。

完全不需要在push之后重新指定newString

"something".split("").reverse().join("") 

解决您的问题:

newString.push(eachLetter[i]) // append to newString 
+0

我不知道有关的算术运算。我认为它只是将'eachLetter'数组中的下一个元素添加到'newString'中。 –

1

更容易扭转一个字符串的方式

  • eachLetter.length >= 0 < - 这将导致一个无限循环,应该是i >= 0
  • i你应该从eachLetter.length - 1开始,最后一个索引
  • 不重新分配newString阵列
  • 您应该更新的i的价值,如果你不希望一个无限循环,i = i - 1
  • 不返回数组,加入的元素,以产生一个字符串
function FirstReverse(str) { 
    var newString = []; 
    var eachLetter = str.split(""); 

    for (i = eachLetter.length - 1; i >= 0; i = i - 1){ 
     newString.push(eachLetter[i]);  
    } 

    return newString.join(""); 
} 
+0

感谢您的回复!你的解释对于理解我的错误是最有帮助的。我不知道'.reverse()' –

0

你分配(实际添加)以newStringnewResult.push()结果。

关于Array.push(),返回值是一个数字,它修改了原始数组。 (Array.push()

您还可以在(无限)for循环一些麻烦..

最后,你返回一个数组,而不是字符串。

试试这个修改:

function FirstReverse(str) { 
    var newString = [ ]; 
    var eachLetter = str.split(""); 
    for(i = eachLetter.length - 1; i >= 0; i--){ 
     newString.push(eachLetter[i]); 
    } 
    return newString.join(""); 
} 

你能避免使用数组:

function FirstReverse(str) { 
    var i, rev = ""; 
    for(i = str.length - 1; i >= 0; i--) rev += str[i]; 

    return rev; 
}