Как создать метод reverse

Помогите дописать код

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    debugger
    var index = 0
    var lastInd = arr.length
    for (var i = arr.length-1; i >= 0; i--) {
        for(var g = i - 1; i > 0; i--){
            arr[index] = arr[i - 1]
            arr[index++]    
           console.log(arr[i]);
        }
    }
console.log(arr);

Ответы (4 шт):

Автор решения: SwaD

Создаем метод reverse()

Один из самых простых способов:

const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

/**
 * @param {number[]} arr
 * @return {number[]}
 */
function reverse(arr) {
  const res = [];
  for (let i = arr.length-1; i >= 0; i--) {
    res.push(arr[i])
  }
  return res;
}

console.log(reverse(arr))

Функция, аналог метода .reverse() - мутирует исходный массив и возвращает массив

const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

function reverse2(arr) {
  const res = [ ...arr ];
  const ord = res.length-1;
  for (let i = ord; i >= 0; i--) {
    arr[ord - i] = res[i];
  }
  return arr;
}

const x = reverse2(arr)
console.log(x, x === arr);

Так же это можно сократить количество итераций по массиву. Ниже 2 функции, одна возвращает новый массив, не мутирая исходный, вторая возвращает массив и мутирует исходный.

const array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
const array2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];

function arrCh(arr) {
  const newArr = [];
  const len = arr.length - 1;
  for (let i = 0; i <= Math.round(arr.length / 2 - 0.5); i++) {
    [ newArr[i], newArr[len - i] ] = [ arr[len - i], arr[i] ]
  }
  return newArr;
}

const res = arrCh(array);
const res2 = arrCh(array2)

console.log('CH', res, res === array);
console.log('CH', res2, res2 === array2);

function arrChMutation(arr) {
  const len = arr.length - 1;
  for (let i = 0; i <= Math.round(arr.length / 2 - 0.5); i++) {
    [ arr[i], arr[len - i] ] = [ arr[len - i], arr[i] ];
  }
  return arr; 
}

const res3 = arrChMutation(array);
const res4 = arrChMutation(array2);
console.log('CH_M', res3, res3 === array);
console.log('CH_M', res4, res4 === array2);

→ Ссылка
Автор решения: Andrei

Метод массива myReverse()

Array.prototype.myReverse = function(){

    const tmp = new Array;

    for (let i = this.length -1, j = 0; i >= 0; --i, ++j){
        tmp[j] = this[i];
    }

    for (let i = 0, n = tmp.length; i < n; ++i){
        this[i] = tmp[i];
    }

    return this;
}

const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

console.log(arr);

// Переворачиваем массив
console.log(arr.myReverse());
→ Ссылка
Автор решения: Алексей Р

Не самый производительный, но короткий вариант

function do_reverse(arr) {
    return arr.reduce((a, c) => [c].concat(a), []);
}

console.log(do_reverse([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))
[
  10, 9, 8, 7, 6,
   5, 4, 3, 2, 1 
]
→ Ссылка
Автор решения: ksa

Предложу такой вариант...

const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
var index = 0
const l = arr.length
const n = Math.trunc(l / 2)
for (let i = 0; i < n; i++) {
  const val = arr[i]
  arr[i] = arr[l - i - 1]
  arr[l - i - 1] = val
}
console.log(arr);

→ Ссылка