Most efficient way to insert into ordered sequence
Fundamentally, you should probably use the array's own ordering. It'd remove the need for a sequence number that you manually have to track and update. Instead, you can simply pluck index 3 out of the array, and splice it in at index 1, and not worry about sequence numbers at all.

But if you can't/won't get the data.dashboards array to behave like that, you can take a detour.

Now, I highly, highly doubt this is the most efficient way of doing things - it's certainly not elegant - but it's straightforward to follow.

Say you have this:

var data = {
    dashboards: [ // random ordering
        {name: "Development", sequence: 3},
        {name: "Sales", sequence: 0},
        {name: "Finance", sequence: 2},
        {name: "Admin", sequence: 1}
    ]
};


Get everything sorted first:

var sorted = data.dashboards.sort(function(a, b) {
    return a.sequence - b.sequence;
});


So now we have an array where the objects are ordered according to their sequence

seq | name
------------------
0   | Sales
1   | Admin
2   | Finance
3   | Development


Then, if we can assume that the sequence numbers are indeed sequential with no gaps or repeats, we could (again) just splice &amp; splice to get the right order.
But let's say we can be sure that index equals sequence number. In that case, loop until we find it, pluck it, and reinsert it:

var currSequence = 3, // the target's current number
    newSequence  = 1, // the target's desired number
    dashboard;

// find and move the target
for( var i = 0, l = sorted.length ; i &lt; l ; i++ ) {
    if( sorted[i].sequence === currSequence ) {
        dashboard = sorted[i];
        sorted.splice(i, 1); // remove the target
        sorted.splice(newSequence, 0, dashboard); // re-insert it at its new position
        break;
    }
}


Now, we have the right order, but not the right sequence numbers:

seq | name
------------------
0   | Sales
3   | Development
1   | Admin
2   | Finance 


Finally, reset the sequence numbers

for( i = 0, l = sorted.length ; i &lt; l ; i++ ) {
    sorted[i].sequence = i;
}


And we get

seq | name
------------------
0   | Sales
1   | Development
2   | Admin
3   | Finance


Neatly sequential numbering and ordering, regardless of the original array's order and sequence values. The original data.dashboards array is still in the same scrambled order as before, but the sequence number of each object is now correct.

Here a jsfiddle



Actually, here's a simpler one that I believe works in all cases, regardless of array ordering, as long as the sequence numbers are sequential already:

var currSequence = 3, // the target's current number
    newSequence  = 1, // the target's desired number
    correction = currSequence &gt; newSequence ? 1 : -1,
    lower = Math.min(currSequence, newSequence),
    upper = Math.max(currSequence, newSequence),
    dashboard;

for( var i = 0, l = data.dashboards.length ; i &lt; l ; i++ ) {
    dashboard = data.dashboards[i];
    if( dashboard.sequence == currSequence ) {
        dashboard.sequence = newSequence;
    } else if( dashboard.sequence &gt;= lower &amp;&amp; dashboard.sequence &lt;= upper ) {
        dashboard.sequence += correction;
    }
}


Here's a demo