1

I am trying to sort this array by status first, then by num in ascending order. I don't want to use Lodash. Thank you

Original:

[
  { num: 0.28, status: true },
  { num: 0.21, status: false },
  { num: 0.2, status: true },
  { num: 0.19, status: false },
  { num: 0.24, status: true },
  { num: 0.23, status: false },
  { num: 0.29, status: false }
  { num: 0.25, status: true },
]

Final:

[
  { num: 0.2, status: true },
  { num: 0.24, status: true },
  { num: 0.25, status: true },
  { num: 0.28, status: true },
  { num: 0.19, status: false },
  { num: 0.21, status: false },
  { num: 0.23, status: false },
  { num: 0.29, status: false }
]

2 Answers2

3

You can sort multiple fields by ||

const data = [
  { num: 0.28, status: true },
  { num: 0.21, status: false },
  { num: 0.2, status: true },
  { num: 0.19, status: false },
  { num: 0.24, status: true },
  { num: 0.23, status: false },
  { num: 0.29, status: false },
  { num: 0.25, status: true },
];

const result = data.sort((a, b) => b.status - a.status || a.num - b.num)

console.log(result)
Mina
  • 14,386
  • 3
  • 13
  • 26
0

You can write a custom function for the Array#sort method to do this:

array.sort((a,b) => a.num - b.num);
zemaj
  • 330
  • 1
  • 7