DLeonardi - 2 years ago 78
Javascript Question

# Sort an array to have specific items first in the array

I've got an array as such:

``````[{flag: true, other: 1},
{flag: true, other: 2},
{flag: false, other: 3},
{flag: true, other: 4},
{flag: true, other: 5},
{flag: true, other: 6},
{flag: false, other: 7}]
``````

I want to have this:

``````[{flag: false, other: 3},
{flag: false, other: 7},
{flag: true, other: 1},
{flag: true, other: 2},
{flag: true, other: 4},
{flag: true, other: 5},
{flag: true, other: 6}]
``````

Basically I want that if
`array[2].flag === false`
(or any other value I choose) the matching element gets placed first in the array, but after previous matching elements.
The elements that do not match, remain in the same order they were in originally.

Order of appearance is important.

How to do this best in JavaScript?

This isn't actually sorting. You can just loop through the array twice and build a new array:

``````var result = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i].flag === false) {
result.push(arr[i]);
}
}
for (var i = 0; i < arr.length; i++) {
if (!arr[i].flag === false) {
result.push(arr[i]);
}
}
``````

You can also do it with two result arrays and one loop, and concatenate the results:

``````var result1 = [], result2 = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i].flag === false) {
result1.push(arr[i]);
} else {
result2.push(arr[i]);
}
}
var result = result1.concat(result2);
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download