Michael Wilson
Michael Wilson

Reputation: 1579

How can I change the position of a particular item in an array?

I'm trying to change an item's index position in an array, but I cannot figure out a way.

{
   "items": [
        1,
        3,
        2
   ]  
}

Upvotes: 3

Views: 98

Answers (2)

Denys Séguret
Denys Séguret

Reputation: 382092

You can use splice to move an element in an array:

var arr = [
        1,
        3,
        2
   ];
var oldIndex = 2,
    newIndex = 1;


arr.splice(newIndex, 0, arr.splice(oldIndex, 1)[0]);

This makes [1, 2, 3]

The internal splice removes and returns the element, while the external one inserts it back.


Just for fun I defined a generic function able to move a slice, not just an element, and doing the computation of the index:

Object.defineProperty(Array.prototype, "move", {
    value:function(oldIndex, newIndex, nbElements){
        this.splice.apply(
            this, [newIndex-nbElements*(newIndex>oldIndex), 0].concat(this.splice(oldIndex, nbElements))
        );
    }
});

var arr = [0, 1, 2, 7, 8, 3, 4, 5, 6, 9];
arr.move(5, 3, 4);
console.log('1:', arr) // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

var arr = [0, 1, 2, 7, 8, 3, 4, 5, 6, 9];
arr.move(3, 9, 2);
console.log('2:', arr); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

var arr = [0, 1, 2, 4, 5, 3, 6, 7];
arr.move(5, 3, 1);
console.log('3:', arr); // [0, 1, 2, 3, 4, 5, 6, 7] 

var arr = [0, 3, 1, 2, 4, 5, 6, 7];
arr.move(1, 4, 1);
console.log('3:', arr); // [0, 1, 2, 3, 4, 5, 6, 7] 

JS Bin

Upvotes: 6

rpadovani
rpadovani

Reputation: 7360

If you want to sort them in Unicode order (where numbers become strings) you can use sort() function.

items.sort();

If you have your custom order, you need to provide a sort function to the sort function.

function compare(a, b) {
  if (a is less than b by some ordering criterion) {
    return -1;
  }
  if (a is greater than b by the ordering criterion) {
    return 1;
  }
  // a must be equal to b
  return 0;
}

and you use it like this:

items.sort(compare(a, b));

Upvotes: -1

Related Questions