8

I have list of users presented in table. Active users should be sorted above the inactive users.

I am trying to make this sort using lodash sortBy function, but unsuccessfully.

Here is how userArray looks:

const userArray [
  { 
    // I need to show users which have disabled = false first 
    // and then users with disabled = true
    disabled: true,  // <==========
    email: "hgaither@cmregent.com",
    firstName: "Harriet",
    lastName: "Gaither",
    role: "claimsHandlerSupervisor",
    userId: "03VFpxtMWgY1jKDHDLcrWSw1qzx1",
  }, 
  {
   disabled: false,  // <===========
   email: "hgaither@cmregent.com",
   firstName: "Harriet",
   lastName: "Gaither",
   role: "claimsHandlerSupervisor",
   userId: "03VFpxtMWgY1jKDHDLcrWSw1qzx1",
 }, 
]

here is code pen with code with users array and sortBy loadsh function: https://codepen.io/nikolatrajkovicq/pen/pGXdpM?editors=1112

Any adivce is welcome.

adiga
  • 34,372
  • 9
  • 61
  • 83
James Delaney
  • 1,765
  • 1
  • 17
  • 36
  • 2
    you could just create 2 arrays with enabled and disabled users, than concat the disabled on the end of enabled, this will make disabled users to appear in the end (but not sorted in any order order) – Vencovsky Feb 22 '19 at 11:57

2 Answers2

21

You can use sort like this:

const userArray=[{disabled:true,email:"hgaither@cmregent.com",firstName:"Harriet",lastName:"Gaither",role:"claimsHandlerSupervisor",userId:"03VFpxtMWgY1jKDHDLcrWSw1qzx1",},{disabled:false,email:"hgaither@cmregent.com",firstName:"Harriet",lastName:"Gaither",role:"claimsHandlerSupervisor",userId:"03VFpxtMWgY1jKDHDLcrWSw1qzx1",},]

userArray.sort((a,b) => a.disabled - b.disabled)
console.log(userArray)

You can just subtract the boolean property inside the compareFunction. This works because of coercion

true - false === 1
false - true === -1
true - true === 0
adiga
  • 34,372
  • 9
  • 61
  • 83
  • thank you for solution and help! I still didn't understood how this works, if you can give me some more inforimation? – James Delaney Feb 22 '19 at 12:05
  • 1
    @JamesDelaney please go through the `sort` link in the answer. It explains the `compareFunction` function in detail. The compare function sorts 2 items realtive to each other based on whether the return value is +ve, -ve or 0. Since `false - true` returns `-1` and vice versa, we can simply subtract the `disabled` properties of 2 items being compared – adiga Feb 22 '19 at 12:11
4

You can use sort

const userArray = [{disabled:true,email:"hgaither@cmregent.com",firstName:"Harriet",lastName:"Gaither",role:"claimsHandlerSupervisor",userId:"03VFpxtMWgY1jKDHDLcrWSw1qzx1",},{disabled:false,email:"hgaither@cmregent.com",firstName:"Harriet",lastName:"Gaither",role:"claimsHandlerSupervisor",userId:"03VFpxtMWgY1jKDHDLcrWSw1qzx1",},{disabled:true,email:"hgither@cmregent.com",firstName:"Hrriet",lastName:"Gither",role:"claisHandlerSupervisor",userId:"0VFpxtMWgY1jKDHDLcrWSw1qzx1",},]

let op = userArray.sort(({disabled:A}, {disabled:B})=> A-B)

console.log(op)
Code Maniac
  • 37,143
  • 5
  • 39
  • 60