如果没有pop和push,这段代码如何反转和更新?

时间:2016-07-16 23:05:24

标签: javascript

我在javascript中介绍自己,我正处于雄辩的javascript中,其中一个数组被反转,

demo[added console.log]

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;
    console.log(old);
  }
  return array;
}
var arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);
// → [5, 4, 3, 2, 1]

我认为var old已更新,但我认为它不是[来自console.log],它与控制台上的第一个旧版本相同。我试图用i&lt; 1操纵for循环;它仍然颠倒了5和1。

我的问题是,这个循环是如何逆转的?在这行代码中具有特异性

var old = array[i];
array[i] = array[array.length - 1 - i];
array[array.length - 1 - i]= old;

非常感谢示例演示

1 个答案:

答案 0 :(得分:0)

该代码正在交换数组的元素。

var array = [1, 2, 3, 4, 5];
var temp = array[0]; // 1
array[0] = array[4]; // array is now [5, 2, 3, 4, 5]
array[4] = temp; // array is now [5, 2, 3, 4, 1]

现在您可以想象使用array[1]array[3]等重复此操作以完全反转数组。这就是你的代码正在做的事情。

添加一些日志记录可能有助于进一步了解正在发生的事情:

function reverseArrayInPlace(array) {
  var limit = Math.floor(array.length / 2);
  console.log('Limit is ' + limit);
  for (var i = 0; i < limit; i++) {
    console.log('Looping with i = ' + i);
    console.log('Array starting as ' + array);

    var old = array[i];
    array[i] = array[array.length - 1 - i];
    array[array.length - 1 - i] = old;
    
    console.log('Array after swap: ' + array);
    
    console.log('\n');
  }

  console.log('Done!');

  return array;
}

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