为什么这个函数 reverseArrayInPlace 不起作用?我只想做函数所说的 - 颠倒元素的顺序,以便结果最终出现在同一个数组 arr 中。我选择通过在函数中使用两个数组来做到这一点。到目前为止,它只是按顺序返回元素......

    var arr = ["a","b","c","d","e","f"]
    var arr2 = []

    var reverseArrayInPlace = function(array){

      var arrLength = array.length
      for (i = 0; i < arrLength; i++) {
        arr2.push(array.pop())
        array.push(arr2.shift())
      }
    }

    reverseArrayInPlace(arr)

最佳答案

这是使用就地算法反转数组的更简单方法

function reverse (array) {
  var i = 0,
      n = array.length,
      middle = Math.floor(n / 2),
      temp = null;

  for (; i < middle; i += 1) {
     temp = array[i];
     array[i] = array[n - 1 - i];
     array[n - 1 - i] = temp;
  }
}

您将数组“拆分”成两半。嗯,不是真的,你只是迭代前半部分。然后,使用公式 n - 1 - i 找到与当前索引相对于中间对称的索引,其中 i 是当前索引。然后使用临时变量交换元素。
公式是正确的,因为它会交换:
0 <-> n - 1
1 <-> n - 2

等等。如果元素个数为奇数,则不影响中间位置。

关于javascript - 反向阵列就位,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32418443/

10-11 09:02