有说服力的JavaScript反转数组就地解释

有说服力的JavaScript反转数组就地解释,javascript,arrays,methods,Javascript,Arrays,Methods,我正在用Marijn Haverbeke的雄辩JavaScript进行练习,并正在解决以下问题: 编写一个函数reverseArrayInPlace,修改作为参数给定的数组,以反转其元素。不要使用标准的反向方法 给出的解决方案如下: function reverseArrayInPlace(array) { for (var i = 0; i < Math.floor(array.length / 2); i++) { var old = array[i];

我正在用Marijn Haverbeke的雄辩JavaScript进行练习,并正在解决以下问题:

编写一个函数reverseArrayInPlace,修改作为参数给定的数组,以反转其元素。不要使用标准的反向方法

给出的解决方案如下:

function reverseArrayInPlace(array) {
   for (var i = 0; i < Math.floor(array.length / 2); i++) {
      var old = array[i];
      array[i] = array[array.length - 1 - i];
      array[array.length - 1 - i] = old;
   }
   return array;
}
我知道它使用阵列的中点作为旋转点,但是有人能给我一个逐步的解释吗

function reverseArrayInPlace(array) {
  //iterate thru half of original array
  for (var i = 0; i < Math.floor(array.length / 2); i++) {
    var old = array[i]; //cache original i value
    array[i] = array[array.length - 1 - i]; //set i value to its "opposite" from end of array
    array[array.length - 1 - i] = old; //set "opposite" to be original i value
  }
  return array;
}
在遍历数组的1/2时,交换距离数组前端和末端相等的2个值。例如:

原始数组:[1,2,3,4,5]

步骤i=0:[5,2,3,4,1]1和5被交换

步骤i=1:[5,4,3,2,1]2和4被交换

在遍历数组的1/2时,交换距离数组前端和末端相等的2个值。例如:

原始数组:[1,2,3,4,5]

步骤i=0:[5,2,3,4,1]1和5被交换

步骤i=1:[5,4,3,2,1]2和4被交换

逐行进行:

for (var i = 0; i < Math.floor(array.length / 2); i++) {
暂时将数组的当前值存储在变量old中的位置i处

将i位置的值设置为数组最后一个元素的值减去当前i

将数组最后一个元素减去当前i的值设置为旧变量中存储的上一个值

简而言之,以下是实际情况下发生的情况:

old将存储当前循环值。该值将替换为最后一个值减去当前索引。基本上,当i为0时,数组[0]变为数组[4],反之亦然。当i为1时,数组[1]将变为数组[3],反之亦然。[array.length-1-i]是必需的,因为数组中的索引从0开始,所以array.length-1是数组的最后一个元素,而-i将偏移量移动i,这使得可以将第一个元素的值与最后一个元素的值切换,反之亦然

那么,交易在哪里而不是进行常规的for循环呢

好的,诀窍是它将花费一半的时间,一次替换两个值,而不是循环整个数组,一次替换一个值。

逐行执行:

for (var i = 0; i < Math.floor(array.length / 2); i++) {
暂时将数组的当前值存储在变量old中的位置i处

将i位置的值设置为数组最后一个元素的值减去当前i

将数组最后一个元素减去当前i的值设置为旧变量中存储的上一个值

简而言之,以下是实际情况下发生的情况:

old将存储当前循环值。该值将替换为最后一个值减去当前索引。基本上,当i为0时,数组[0]变为数组[4],反之亦然。当i为1时,数组[1]将变为数组[3],反之亦然。[array.length-1-i]是必需的,因为数组中的索引从0开始,所以array.length-1是数组的最后一个元素,而-i将偏移量移动i,这使得可以将第一个元素的值与最后一个元素的值切换,反之亦然

那么,交易在哪里而不是进行常规的for循环呢


好的,诀窍是它将花费一半的时间,一次替换两个值,而不是循环整个数组,一次替换一个值。

您需要知道的是什么,在JS中,其余的就像一个伪代码。顺便说一句,你总是可以用内置的数组方法来反转数组。你需要知道的可能是什么,而在JS和其他方面就像一个伪代码。顺便说一句,你总是可以用内置的数组方法来反转数组。数组的可能重复
var old = array[i];
array[i] = array[array.length - 1 - i];
array[array.length - 1 - i] = old;