Search code examples
javascriptarraysalgorithmarray-algorithms

Reversing an array without 'reverse' or duplicating an array


I'm trying to solve the following exercise:

Reverse an array without using the reverse method, without using a second array, and without duplicating any of the values.

I've thought about making the array an object and then updating the array from the end to the beginning but I figured you can just update it as well.

Tried something simple like:

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);

But that doesn't really change it. Any advice or explanation on how to do this?


Solution

  • With ES6 syntax you don't need to copy a value into a temporary variable (is that what the last requirement is about?).

    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);

    One may argue that arrays are created here (if engines don't optimise this away), just like splice also creates an array (as its return value).