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?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With