Immutable Move in Javascript

by Javid Jamae

HTML

<p> original => <span id="original"></span> </p>
<p>original.immutableMove(1,2) => <span id="a"></span></p>
<p>original.immutableMove(0,3) => <span id="b"></span></p>
<p>original.immutableMove(2,13) => <span id="c"></span></p>
<p>original.immutableMove(10,3) => <span id="d"></span></p>

JavaScript

Array.prototype.immutableMove = function (old_index, new_index) {
    var copy = Object.assign([], this)
    if (new_index >= copy.length) {
        var k = new_index - copy.length;
        while ((k--) + 1) {
            copy.push(undefined);
        }
    }
    copy.splice(new_index, 0, copy.splice(old_index, 1)[0]);
    return copy
};

var original = [1,2,3,4]
var a = original.immutableMove(1,2)
var b = original.immutableMove(0,3)
var c = original.immutableMove(2,13)
var d = original.immutableMove(10,3)

document.getElementById('original').innerHTML = original;

document.getElementById('a').innerHTML = a;
document.getElementById('b').innerHTML = b;
document.getElementById('c').innerHTML = c;
document.getElementById('d').innerHTML = d;