I am using angular 10 and I was wondering how can I sort this array
var dic = [
  { state: false, id: 1 },
  { state: true, id: 2} ,
  { state: false, id: 3 },
  { state: true, id: 4 },
  { state: false, id: 5 }
]
I want to sort by the value of the boolean state, so the result goes this way:
[
  { state: true, id: 2 },
  { state: true, id: 4 },
  { state: false, id: 1 },
  { state: false, id: 3 },
  { state: false, id: 5 }
]
The true value goes first in the array.
What property or something from typescript I have to use to do that?
Thank you!
You can do this using Array#sort by converting the boolean values of state:
Number(true) //1
Number(false) //0
const dic = [
  { state: false, id: 1 },
  { state: true, id: 2 },
  { state: false, id: 3 },
  { state: true, id: 4 },
  { state: false, id: 5 }
];
dic.sort(({ state: stateA = false }, { state: stateB = false }) =>
  Number(stateB) - Number(stateA)
);
console.log(dic);
You can complete it by doing simplify like this.
dic.sort((a, b) => b.state - a.state);
Explain:
We all know that:
false // 0
true // 1
So
false - true // -1
true - false // 1
true - true // 0
false - false // 0
Demo
const dic = [
  { state: false, id: 1 },
  { state: true, id: 2 },
  { state: false, id: 3 },
  { state: true, id: 4 },
  { state: false, id: 5 }
];
dic.sort((a, b) => b.state - a.state);
console.log(dic);
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