Diese Version ist nicht ideal für alle Zwecke, und nicht jeder mag Kommaausdrücke, aber hier ist ein Einzeiler, der ein reiner Ausdruck ist und eine neue Kopie erstellt:
const move = (from, to, ...a) => (a.splice(to, 0, ...a.splice(from, 1)), a)
Eine leicht leistungsverbesserte Version gibt das Eingabe-Array zurück, wenn keine Verschiebung erforderlich ist. Es ist immer noch OK für unveränderliche Verwendung, da sich das Array nicht ändert, und es ist immer noch ein reiner Ausdruck:
const move = (from, to, ...a) =>
from === to
? a
: (a.splice(to, 0, ...a.splice(from, 1)), a)
Der Aufruf einer der beiden Möglichkeiten ist
const shuffled = move(fromIndex, toIndex, ...list)
d.h. es ist auf die Verbreitung angewiesen, um eine neue Kopie zu erzeugen. Verwendung einer festen Arität 3 move
würde entweder die Eigenschaft des einmaligen Ausdrucks, die Zerstörungsfreiheit oder den Leistungsvorteil von splice
. Auch hier handelt es sich eher um ein Beispiel, das einige Kriterien erfüllt, als um einen Vorschlag für die Verwendung in der Produktion.
0 Stimmen
ES6 verwenden
const changeValuePosition = (arr, init, target) => {[arr[init],arr[target]] = [arr[target],arr[init]]; return arr}
5 Stimmen
Das vertauscht einfach die Elemente bei
init
ytarget
.0 Stimmen
@user4945014 Es geht nicht nur um den Tausch. Wenn eine Vertauschung stattfindet, würde der OP array = ['a', 'd', 'c', 'b', 'e'] erhalten, was bedeuten würde, dass 'c' und 'b' in der falschen Reihenfolge wären. Ein Insert und Shift, wie er es sucht, hält 'b' und 'c' in der gleichen Reihenfolge.