为什么这个函数 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/