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 FunctionsComma 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
