来自 eloquent book 的 javascript 中的反向数组

问题描述 投票:0回答:2

其实我知道在js中有更简单的方法来反转数组,但我需要有人帮助才能理解这种反转方法。

谢谢你的帮助。

function reverseArrayInPlace(array) {
  for (let i = 0; i < Math.floor(array.length / 2); i++) {
    console.log(array[array.length - 1 - i])
    let old = array[i];
    array[i] = array[array.length - 1 - i];
    array[array.length - 1 - i] = old;
  }
  return array;
}
console.log(reverseArrayInPlace([1, 2, 3, 4])); // 4, 3, 2, 1

javascript arrays eloquent reverse
2个回答
1
投票

代码有两个指针:一个在数组的开头(称为

i
),一个在数组的末尾(称为
n - 1 - i
)。对于每次迭代,我们交换两个指针的值。我们重复这个直到我们到达
i = floor(n / 2)
.

通过交换这些索引,数组最终将被反转。举个例子更容易理解。假设你有数组

[1, 2, 3, 4, 5, 6]
.

Iteration 1: (i=0, n-1-i=5)
    Pointers at 1 and 6. After swapping, Array=[6, 2, 3, 4, 5, 1]
Iteration 2: (i=1, n-1-i=4)
    Pointers at 2 and 5. After swapping, Array=[6, 5, 3, 4, 2, 1]
Iteration 3: (i=2, n-1-i=3)
    Pointers at 3 and 4. After swapping, Array=[6, 5, 4, 3, 2, 1]

0
投票

该函数使用 for 循环使用 Math.floor(array.length / 2) 遍历数组直到它的中点,以确保它只交换每个元素一次。

在每次迭代中,该函数使用一个名为 old 的临时变量来存储当前被交换的元素。然后给当前元素赋值数组对端对应元素的值,对端元素赋值old。

这个交换过程一直持续到函数循环遍历数组的一半,此时返回反向数组。

console.log(array[array.length - 1 - i]) 行是一条调试语句,它在每次迭代期间打印即将在控制台中交换的元素。

© www.soinside.com 2019 - 2024. All rights reserved.