Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 864
duck degen Avatar asked Aug 07 '11 16:08

duck degen


1 Answers

The Spread syntax introduced with ECMAScript6 (e.g., [...object]) makes this relatively straightforward using an Array's reduce method:

const arr = [   { 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 } ];  const sortedArr = arr.reduce((acc, element) => {   if (!element.flag) {     return [element, ...acc];   }   return [...acc, element]; }, []); 

I found this example of extended parameter handling really helpful.

like image 106
felguerez Avatar answered Sep 22 '22 06:09

felguerez