Как создать метод 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);