Nolan Nolan - 6 months ago 86
AngularJS Question

JavaScript move array element to end of array

EDIT - 2 elegant solutions

Two elegant solutions, from Pranav and Bekim. Thanks, both tested and worked perfectly.

One

for(var x in data)data[x].name == "other" ? data.push( data.splice(x,1)[0] ) : 0;


Two

var res = data.slice(),
len = res.length;

for (var i = 0; i < len; i++) {
if (res[i].name == 'other') {
res.push(res.splice(i, 1)[0]);
i--;
len--;
}
}


JS TOOLS IM USING

Angular 1.5.6, lodash 4.1x

Here is the scenario I have an array of objects sorted alphabetically e.g. sortedData below etc.. However, within that array is also the catch all
Other
which is obviously sorted alphabetically as well. I want to remove other from the array and then move to the end of array without messing with the current sorted array.

NOTE

My current approach below works but is ugly. Does JS, angular or lodash have something more elegant?

var data = [
{id:1,name:'apple'},
{id:2,name:'banana'},
{id:3,name:'other'},
{id:4,name:'tomato'},
{id:5,name:'strawberry'}
];

function move(array, fromIndex, toIndex) {
array.splice(toIndex, 1, array.splice(fromIndex, 1)[0]);
return array;
}

var moved = move(
data,
_.findIndex(data, ['name', 'other']),
Object.keys(data).length
);


Ideal Outcome

var data = [
{id:1,name:'one'},
{id:2,name:'two'},
{id:4,name:'four'},
{id:5,name:'five'}
{id:3,name:'other'},
]

Answer

JavaScript will do just fine I believe:

 for(var x in data)data[x].name == "other" ? data.push( data.splice(x,1)[0] ) : 0;