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: "[email protected]",
    firstName: "Harriet",
    lastName: "Gaither",
    role: "claimsHandlerSupervisor",
    userId: "03VFpxtMWgY1jKDHDLcrWSw1qzx1",
  }, 
  {
   disabled: false,  // <===========
   email: "[email protected]",
   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.

1
  • 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) Commented Feb 22, 2019 at 11:57

2 Answers 2

21

You can use sort like this:

const userArray=[{disabled:true,email:"[email protected]",firstName:"Harriet",lastName:"Gaither",role:"claimsHandlerSupervisor",userId:"03VFpxtMWgY1jKDHDLcrWSw1qzx1",},{disabled:false,email:"[email protected]",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
Sign up to request clarification or add additional context in comments.

2 Comments

thank you for solution and help! I still didn't understood how this works, if you can give me some more inforimation?
@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
4

You can use sort

const userArray = [{disabled:true,email:"[email protected]",firstName:"Harriet",lastName:"Gaither",role:"claimsHandlerSupervisor",userId:"03VFpxtMWgY1jKDHDLcrWSw1qzx1",},{disabled:false,email:"[email protected]",firstName:"Harriet",lastName:"Gaither",role:"claimsHandlerSupervisor",userId:"03VFpxtMWgY1jKDHDLcrWSw1qzx1",},{disabled:true,email:"[email protected]",firstName:"Hrriet",lastName:"Gither",role:"claisHandlerSupervisor",userId:"0VFpxtMWgY1jKDHDLcrWSw1qzx1",},]

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

console.log(op)

7 Comments

this doesn't work. The result shows true -> false -> true
OP said I need to show first users which have disabled property False then users which true. Your code shows the user with true first
First should be presented Active useres and on the End Inactive users @MaheerAli
@adiga did you checked the snippet output really ?
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.