2016-09-16 68 views
0

我是一個JavaScript初學者,我已經寫了下面的代碼片段,在我的腦海裏應該返回一個數組:[5,4,3,2,1],而是它返回[5]。我意識到有更好的方法來實現這個結果,但是我想了解的是爲什麼我的解決方案不起作用。JavaScript函數包含數組方法不返回所需的結果

function reverseArray(array) { 
    for (var i = 3; i >= 0; i--) 
    array.concat(array.slice(i,i+1)); 
    for (var i = 3; i >= 0; i--) 
    array.shift(); 
    return array; 
}; 

var arrayValue = [1, 2, 3, 4, 5]; 
reverseArray(arrayValue); 
console.log(arrayValue); 
// JS Bin returns: [5] 

移位方法似乎可行,但concat/slice代碼似乎不會改變數組。爲什麼不?當我測試線路作爲獨立代碼時,它工作正常。任何解釋將不勝感激。謝謝!

+0

爲什麼不交換第一個和最後一個元素以及第一個+1和最後一個-1等等? –

+1

'arrayValue.reverse()' – adeneo

+0

'concat/slice代碼似乎不會改變數組。爲什麼不呢?因爲'concat'和'slice'都不能修改數組。我知道這是一個無聊的解釋,但這是解釋。 – vlaz

回答

2

concat and slice創建一個新的數組而不改變原來的。 shift修改它所作用的數組。

基本上,你正在生成一堆新的子陣列concat,但你沒有對它們做任何事情。

+1

只是個人的。我感謝你的回答。 –

+1

@NinaScholz謝謝:)我也非常感謝你。高品質的東西。 –

+1

謝謝!這是我想要了解的內容(看起來很簡單)。並感謝所有其他人給予他或她的建議 - 所有的好東西。 –

2

邁克說:array.concat(…)不修改array,它創建一個新的數組,然後忽略。

看來你只是想追加一個值 - 這就是push做:

function reverseArray(array) { 
    for (var i = 3; i >= 0; i--) 
    array.push(array[i]); 
    for (var i = 3; i >= 0; i--) 
    array.shift(); 
    return array; 
} 

你可能也想使用array.length而不是不斷3導出的變量值。

0

有答案如何工作concatshift功能。這裏是一小段代碼,如果你不想創建現有數組的本地副本,那麼如何通過算法方法輕鬆實現這個功能。

function reverseArray(array) { 
    var i = 0; 
    var j = array.length - 1; 

    while (i < j) { 
    var tempArrayElement = array[i]; 
    array[i] = array[j]; 
    array[j] = tempArrayElement; 

    i++; 
    j--; 
    } 
} 
相關問題