在没有"反向"或复制数组的情况下反转数组

3 javascript arrays algorithm array-algorithms

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

不使用反向方法反转数组,不使用第二个数组,也不重复任何值.

我已经考虑过将数组作为一个对象,然后从最后到开始更新数组,但我想你也可以更新它.

尝试过简单的事情:

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);
Run Code Online (Sandbox Code Playgroud)

但这并没有真正改变它.有关如何做到这一点的任何建议或解释?

tri*_*cot 8

使用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);
Run Code Online (Sandbox Code Playgroud)

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