Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swapping elements in an array of objects [duplicate]

I have an array of objects and I want to swap the position of two elements in the array. I tried this:

var tempObject = array.splice(index, 1, array[index + 1]);
array.splice(index+1, 1, tempObject);

But it doesn't seem to work properly as it results in some weird errors. For example, I am unable to use methods of the object. Calling array[x].getName results in an error.

Can any body lend a helping hand here?

Just in case it is important, I have used object.prototype to add the methods.

like image 801
James Allingham Avatar asked Feb 10 '26 23:02

James Allingham


1 Answers

The bug in your code is that splice returns an array of items, not a single item. Since you are extracting a single item, you could do:

var tempObject = array.splice(index, 1, array[index + 1])[0]; // get the item from the array
array.splice(index+1, 1, tempObject);

This answer provides a shorter version, also using splice:

array[index] = array.splice(index+1, 1, array[index])[0];

Another very interesting answer is both short and fast:

function identity(x){return x};

array[index] = identity(array[index+1], array[index+1]=array[index]);
like image 63
Tibos Avatar answered Feb 13 '26 15:02

Tibos



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!