2016-04-25 154 views
0
var rarr = []; 
var reverseArray = function(arr) { 
    if(arr[0]) { 
    rarr.push(arr[arr.length-1]); 
    arr.pop(); 
    reverseArray(arr); 
    } else { 
    return rarr; 
    } 
} 

console.log(reverseArray(["A", "B", "C"])); 

在调试结束时,rarr的值是['C','B','A'],而不是返回undefined。提前致谢。为什么这段代码返回undefined?

+1

尽管在目前给出的答案'return'的bug,测试'ARR [ 0]'得到循环终止是_horrible_ - 如果你的数组中的任何元素保存了一个伪值(例如,零) – Alnitak

+0

感谢您指出。 :) –

回答

1

虽然RARR的调试值为[ 'C', 'B', 'A']在末端,代替它 被返回undefined

不必返回将成为值通过递归调用返回

更换

reverseArray(arr); 

return reverseArray(arr); 

或者干脆

console.log(["A", "B", "C"].reverse()); 
+0

哎呀..错过了..谢谢。任何其他优化的方式,你可以建议? –

+0

@kamalkokne只是'[“A”,“B”,“C”]。reverse()' – gurvinder372

+0

reverse()是完美的,但我正在寻找无反转方法的优化解决方案。谢谢 –

1

你忘了你一回,如果...试试这个:

var rarr = []; 
var reverseArray = function(arr) { 
    if(arr[0]) { 
    rarr.push(arr[arr.length-1]); 
    arr.pop(); 
    return reverseArray(arr); 
    } else { 
    return rarr; 
    } 
} 

console.log(reverseArray(["A", "B", "C"]));