一尘不染

反转数组而无需“反转”或复制数组

algorithm

我正在尝试解决以下练习:

不使用反向方法,不使用第二个数组并且不复制任何值而对数组进行反向。

我考虑过将数组作为对象,然后从头到尾更新数组,但我认为您也可以对其进行更新。

尝试了一些简单的方法:

function reverseArray(array) {

  for (var i = 0; i < array.length; i++) {

    // var elem = array.shift();

    var elem = array.shift()

    array.push(elem)

  }

  return array

}



array = ['a', 'b','c','d','e'];



reverseArray(array);

但这并没有真正改变它。有关如何执行操作的任何建议或解释?


阅读 335

收藏
2020-07-28

共1个答案

一尘不染

使用ES6语法,您不需要将值复制到临时变量中(这是最后一个要求的内容吗?)。

function reverse(arr) {

    for(let i = 0, j = arr.length-1; i < j; i++, j--)

        [arr[i], arr[j]] = [arr[j], arr[i]];

}



const arr = ['a','b','c','d','e'];

reverse(arr);

console.log(arr);

可能有人争辩说,数组是在这里创建的(如果引擎没有对其进行优化),就像splice创建数组一样(作为其返回值)。

2020-07-28