Реверс js массива

299
03 марта 2017, 01:18

Пытаюсь написать функцию на JS которая принимает заданный массив и реверсирует его. Я знаю о том что есть специальный метод для этого, но есть желание как у начинающего написать вручную. Привожу код, который по не понятным мне причинам возвращает пустой массив.

function reverseArray(myArray) {
  var newMyArray = [];
  for (var i = myArray.length; i > 0; i--) {
    newMyArray.unshift(myArray.pop());
  }
  return newMyArray;
}
Answer 1

Ваша функция работает, но неправильно (см. комментарий). Ну и в исходном массиве после нее ничего нет.

function reverseInPlace(anArray) { 
  for (var i = 0; i < anArray.length / 2; i++) { 
    var temp = anArray[i]; 
    anArray[i] = anArray[myArray.length - 1 - i]; 
    anArray[anArray.length - 1 - i] = temp; 
  } 
} 
     
function reverseArray(myArray) { 
  var newMyArray = []; 
  for (var i = myArray.length; i > 0; i--) {  
    newMyArray.unshift(myArray.pop()); // needs newMyArray.push instead 
  } 
  return newMyArray; 
} 
 
var myArray = [1, 2, 3, 4, 5];     
var newArray = reverseArray(myArray); 
console.log(newArray); 
console.log(myArray); 
 
myArray = [1, 2, 3, 4, 5];     
reverseInPlace(myArray); 
console.log(myArray);

Answer 2
С изменением самого массива

function reverse(a) { 
  for (var l=0, r=a.length-1; l<r; ++l, --r) { 
    var temp = a[l]; 
    a[l] = a[r]; 
    a[r] = temp; 
  } 
   
  return a; 
} 
 
console.log("" + reverse([])); 
console.log("" + reverse([1])); 
console.log("" + reverse([1,2])); 
console.log("" + reverse([1,2,3])); 
console.log("" + reverse([1,2,3,4,5,6,7,8])); 
console.log("" + reverse([1,2,3,4,5,6,7,8,9]));

С созданием нового массива

function reverse(a) { 
  var res = []; 
 
  for (var q=a.length-1; ~q; --q) { 
    res.push(a[q]); 
  } 
   
  return res; 
} 
 
console.log("" + reverse([])); 
console.log("" + reverse([1])); 
console.log("" + reverse([1,2])); 
console.log("" + reverse([1,2,3])); 
console.log("" + reverse([1,2,3,4,5,6,7,8])); 
console.log("" + reverse([1,2,3,4,5,6,7,8,9]));

Answer 3

const revert = a => a.reduceRight((_, e) => (_.push(e), _), []); 
 
console.info(revert([1, 2, 3, 4, 5]));

READ ALSO
Вписывание изображений в блок

Вписывание изображений в блок

Подскажите как можно сделать вписывание изображений в зависимости от их количества в блок ?

314
Кривой скроллинг к элементу

Кривой скроллинг к элементу

Доброго времени суток

161
Зависимость модулей

Зависимость модулей

Есть три куска кода:

239