2016-04-28 71 views
0

爲什麼不能正常工作? ps。我不想使用任何其他變量使其工作,並且我不想使用內置函數,只是問爲什麼這不起作用?爲什麼這個反轉功能不起作用?

function reverse(arr){ 
    for(var i =0; i< arr.length; i++){ 
    arr.push(arr[arr.length-i]); 
    } 
    return arr; 
} 
+3

你知道什麼'arr.push(arr [arr.length-i]);' – Tushar

+0

@AlexanderMac當你看到問題並且代碼,你不能給這個評論。 –

+0

@Alexander Mac我想反轉而不使用任何其他變量,這可能嗎? –

回答

1

代碼中有很多缺陷。

  • 當您開始推入arr.push(arr[arr.length-i]);時,數組長度會增加,因此您將無法獲得數據的一致性。
  • 這是在一個無限循環內,因爲每一次,arr超前它的長度。

最好使用另一個變量和反向,或者你可以使用內置的reverse()函數。有另一個變量並在其中添加臨時內容沒有任何問題。

解決方案:

使用臨時數組:

function reverse(arr) { 
    var final = []; 
    for (var i = arr.length - 1; i >= 0; i--) { 
     final.push(arr[i]); 
    } 
    return final; 
} 

使用built-in function (Array.prototype.reverse())

function reverse(arr) { 
    return arr.reverse(); 
} 

使用幾個臨時變量:

a = [5,4,3,2,1]; 
 
function reverse(arr) { 
 
    var i = 0, j = arr.length - 1; 
 
    for (i = 0; i < j; i++, j--) { 
 
    var temp = arr[i]; 
 
    arr[i] = arr[j]; 
 
    arr[j] = temp; 
 
    } 
 
    return arr; 
 
} 
 

 
console.log(reverse(a));

+0

@RobertLock歡迎。我可否知道你需要「不」使用臨時變量的主要原因是什麼? –

+0

我正在閱讀Eloquent JS,並且有一個練習如下所示:「第一個reverseArray將一個數組作爲參數,並生成一個具有相反元素的新數組。第二個reverseArrayInPlace會執行reverse方法的作用是:修改數組作爲參數,以便反轉它的元素,既不可以使用標準的反向方法 –

+0

所以,基本上我必須寫兩個函數,而且我還不能寫第二個函數 –

0

我不希望使用任何其他變量,使其工作,而我不希望使用內置在功能

你不能。


使用結果

function reverse(arr) { 
    var res = [] 
    for (var i = arr.length - 1; i > -1; i--) { 
     res.push(arr[i]); 
    } 
    return res; 
} 
0

臨時數組你會耗盡內存。你正在做的是將最初是該陣列的最後一個元素無限地添加到數組的最後。每次您撥打arr.push(...)時,您都會增加一個arr.length。你的for循環將永遠無法完成,因爲i永遠不會少於arr.length