Vänd en array i JavaScript utan att ändra den ursprungliga arrayen


Array.prototype.reverse vänder innehållet i en array på plats (med mutation)...

Finns det en lika enkel strategi för att vända en array utan att ändra innehållet i den ursprungliga arrayen (utan mutation)?

Svar #1

Du kan använda slice() för att göra en kopia och sedan reverse() den

var newarray = array.slice().reverse();

var array = ['a', 'b', 'c', 'd', 'e'];
var newarray = array.slice().reverse();

console.log('a', array);
console.log('na', newarray);

Svar #2

2023

const newArray = array.toReversed()

Array.prototype.toReversed()

I ES6:

const newArray = [...array].reverse()

Svar #3

const originalArray = ['a', 'b', 'c', 'd', 'e', 'f'];

const newArray = Array.from(originalArray).reverse();

console.log(newArray);

Svar #4

ES2023 Array-metod toReversed()

Från den länkade dokumentationen:

Metoden toReversed() transponerar elementen i det anropande array-objektet i omvänd ordning och returnerar en ny array.

const items = [1, 2, 3];
console.log(items); // [1, 2, 3]

const reversedItems = items.toReversed();
console.log(reversedItems); // [3, 2, 1]
console.log(items); // [1, 2, 3]

Webbläsarkompatibilitet

Metoden toReversed() läser längd-egenskapen av detta. Den besöker sedan varje egenskap som har en heltalsnyckel mellan length - 1 och 0 i fallande ordning, och lägger värdet av den aktuella egenskapen till slutet av arrayen som ska returneras.

Svar #5

En annan ES6-variant:

Vi kan också använda .reduceRight() för att skapa en omvänd array utan att faktiskt vända den.

let A = ['a', 'b', 'c', 'd', 'e', 'f'];

let B = A.reduceRight((a, c) => (a.push(c), a), []);

console.log(B);

Användbara resurser:

  • Array.prototype.reduceRight()
  • Arrow Functions
  • Comma Operator

Svar #6

Det finns flera sätt att vända en array utan att modifiera den. Två av dem är

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

// Using slice
var reverseArray1 = array.slice().reverse(); // Fastest

// Using spread operator
var reverseArray2 = [...array].reverse();

// Using for loop 
var reverseArray3 = []; 
for(var i = array.length-1; i>=0; i--) {
  reverseArray.push(array[i]);
}

Prestandatest http://jsben.ch/guftu

Relaterade artiklar