Sort array of objects by multiple fields using javascript sort()

Viewed 34

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 Answers

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)

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

array.sort((a,b) => a.num - b.num);
Related