Hier ist mein ES6-Einzelplatzlösung mit einem optionalen Parameter on
.
if (typeof Array.prototype.move === "undefined") {
Array.prototype.move = function(from, to, on = 1) {
this.splice(to, 0, ...this.splice(from, on))
}
}
Anpassung des ersten Lösungsvorschlags von digiguru
Der Parameter on
ist die Anzahl der Elemente, die mit from
Sie umziehen möchten.
Hier ist eine verkettbare Variante davon:
if (typeof Array.prototype.move === "undefined") {
Array.prototype.move = function(from, to, on = 1) {
return this.splice(to, 0, ...this.splice(from, on)), this
}
}
[3, 4, 5, 1, 2].move(3, 0, 2) // => [1, 2, 3, 4, 5]
Wenn Sie die Verschmutzung durch Prototypen vermeiden möchten, finden Sie hier eine eigenständige Funktion:
function move(array, from, to, on = 1) {
return array.splice(to, 0, ...array.splice(from, on)), array
}
move([3, 4, 5, 1, 2], 3, 0, 2) // => [1, 2, 3, 4, 5]
Und schließlich eine reine Funktion, die das ursprüngliche Array nicht verändert:
function moved(array, from, to, on = 1) {
return array = array.slice(), array.splice(to, 0, ...array.splice(from, on)), array
}
Dies sollte im Grunde jede Variante abdecken, die in jeder anderen Antwort vorkommt.
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.