Array.prototype.reverse
kehrt den Inhalt eines Arrays um (mit Mutation) ...
Gibt es eine ähnlich einfache Strategie zum Umkehren eines Arrays, ohne den Inhalt des ursprünglichen Arrays zu ändern (ohne Mutation)?
javascript
arrays
sfletche
quelle
quelle
Antworten:
Sie können Slice () verwenden , um eine Kopie zu erstellen, und diese dann umkehren ()
Code-Snippet anzeigen
quelle
If begin is omitted, slice begins from index 0.
- so ist es das gleiche wiearray.slice(0)
In ES6:
quelle
[...].reverse
in einem sehr einfachen Testfall einen Vorteil zu bieten scheint . jsperf.com/reverse-vs-slice-reverse/1.slice
schneller.slice
wahrscheinlich schneller. B / C[...]
ist ein generisches Iterable-to-Array und kann daher nicht so viele Annahmen treffen. Es ist auch wahrscheinlich, dassslice
es besser optimiert ist, da es schon lange her ist.Eine weitere ES6-Variante:
Wir können auch
.reduceRight()
ein umgekehrtes Array erstellen, ohne es tatsächlich umzukehren.Nützliche Ressourcen:
Array.prototype.reduceRight()
Arrow Functions
Comma Operator
quelle
reduceRight
ist langsam af(a, c) => a.concat([c])
fühlt sich idiomatischer an als(a, c) => (a.push(c), a)
Versuchen Sie diese rekursive Lösung:
quelle
Eine ES6-Alternative zur Verwendung
.reduce()
und Verbreitung.Grundsätzlich wird ein neues Array mit dem nächsten Element in foo erstellt und das akkumulierte Array für jede Iteration nach b verteilt.
Alternativ
.reduceRight()
wie hier oben erwähnt, jedoch ohne die.push()
Mutation.quelle
Es gibt mehrere Möglichkeiten, ein Array umzukehren, ohne es zu ändern. Zwei von ihnen sind
Leistungstest http://jsben.ch/guftu
quelle
IN einfaches Javascript:
quelle
Umkehren mit variablem Tausch nur zu Demonstrationszwecken (Sie benötigen jedoch eine Kopie, wenn Sie nicht mutieren möchten).
quelle
es6:
quelle
1
am Ende alles größer als Null gewesen sein könnte, denn so funktioniertArray.prototype.sort
Rückruf (oder so genanntcompare function
). Grundsätzlich vergleichen Sie immer 2 Zahlen und in diesem Fall wird der Vergleich immer positiv zurückgegeben, sodass immer die zweite Zahl vor der ersten angezeigt wirdsort()
mutiert das Array (dh sortiert es an Ort und Stelle), was das OP vermeiden möchte.