2017-02-27 92 views
1

我一直在通过Eloquent JS进行研究,但无法弄清楚“颠倒数组”的问题。颠倒阵列 - 了解解决方案

有问题的参数,如不能使用arr.reverse。无论如何,扭转同一个阵列的解决方案已经到位,让我无法防范,我正在寻找帮助解决问题的人。

function reverseArrayInPlace(arr) { 
    var length = (Math.floor(arr.length))/2; 

    for (var i = 0; i < length; i++) { 
    var old = arr[i]; 
    arr[i] = arr[arr.length - 1 - i]; 
    arr[arr.length - 1 - i] = old; 
} 
    return arr; 
} 

我觉得这将是击穿:

function reverseArrayInPlace(arr) { 
    var length = (Math.floor(arr.length))/2; 

    for (var i = 0; i < length; i++) { 
    var old = arr[i];     // var old now equals 1 
    arr[i] = arr[arr.length - 1 - i]; // 5 - 1 - 0 = 4. Arr[i] = 4 
    arr[arr.length - 1 - i] = old; // 4th position of arr = 1 
            // new arr is 4,2,3,1,5 ? 
} 
    return arr; 
} 


var arrayValue = [1, 2, 3, 4, 5]; 
reverseArrayInPlace(arrayValue); 
console.log(arrayValue); 

解决方案的工作,所以很明显我的逻辑是关闭的。我哪里错了?

+1

数组索引从零开始,所以'arr [4]'是'5',而不是'4'。 – Pointy

+1

哦,哇,我很笨。由于.length是5并且减去1,所以我被抛弃了。尽管如此,现在这很合理。谢啦 –

回答

0

由于尖在评论中指出:

数组下标从零开始,所以arr[4]5,不4