0

当我调用这个函数时,发送例如:abc 作为参数,函数返回:undefinedcba。我不知道为什么它会在我的返回值中添加“未定义”。我可能忽略了一些明显的东西,但我无法发现它。谢谢你。

function FirstReverse(str) { 
    var str_arr1 = new Array();
    var ans = '';
    for(i=0; i < str.length; i++) {
        str_arr1.push(str.charAt(i));
    }
    for(j=str.length; j >= 0; j--) {
        ans += str_arr1[j];
    }
    return ans; 
}
4

5 回答 5

9

字符串是 0 索引的。 str[str.length]不存在。

j需要从str.length - 1.

要不就return str_arr1.join();

于 2012-06-01T20:45:09.050 回答
1

字符串的索引从 0 开始,因此string.length总是比字符串中最后一个字符的索引大一个数字。

在第二个 for 循环中,使用

for(var j=str.length -1; j >= 0; j--) {
于 2012-06-01T20:47:04.473 回答
0

因为当您传递 'abc' 时,其中只有 3 个字符。所以数组str_arr在索引 0、1 和 2 处有元素。但是你正在循环str.lengthie 3 次并且str_arr[3]没有定义。

你应该做这个,

function FirstReverse(str) {  
  var str_arr1 = new Array();
  var ans = '';
  for(i=0; i < str.length; i++) {
    str_arr1.push(str.charAt(i));
  }
  for(j=str.length-1; j >= 0; j--) {
    ans += str_arr1[j];
  }
  return ans;  
}
于 2012-06-01T20:49:18.103 回答
0

看起来你想反转一个字符串,你可以在这个 javascript one liner 中做到这一点

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

你得到一个未定义的原因是因为你j以 开头str.length,而它应该str.length-1. str_arr1[str.length]是超出范围的,因此将是未定义的。

于 2012-06-01T20:51:43.730 回答
0

错误在第二个for语句中。查看解决方案:

function FirstReverse(str) { 
    var str_arr1 = new Array();
    var ans = '';
    for(i=0; i < str.length; i++) {
        str_arr1.push(str.charAt(i));
    }
    for(j=str.length-1; j >= 0; j--) {
        ans += str_arr1[j];
    }
    return ans;
}
于 2012-06-01T20:45:32.327 回答