Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
559 views
in Technique[技术] by (71.8m points)

sort items by two different properties javascript

I have an array of objects.

const people = [
   {
     active: true,
     hasMoney: false
   },
   {
     active: false,
     hasMoney: false
   },
   {
     active: true,
     hasMoney: true
   }
]

I want to sort the data in this order: active: true -> hasMoney: true -> active: false -> hasMoney: false

Important: If the user is active === true and hasMoney === true, then this should be ordered after active === true and hasMoney === false

I tried the following but it didn't work. Anyone have any ideas?

people
  .sort((x, y) =>
     x.hasMoney
       ? Number(x) - Number(y)
       : Number(isPersonActive(y)) - Number(isPersonActive(x))
)
question from:https://stackoverflow.com/questions/65626100/sort-items-by-two-different-properties-javascript

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You could take the delta of the boolean values and sort by two properties with a special look to the sorting of same values.

const people = [{ active: false, hasMoney: true }, { active: true, hasMoney: false }, { active: false, hasMoney: false }, { active: true, hasMoney: true }];

people.sort((a, b) =>
    b.active - a.active || 
    (a.hasMoney === b.active) - (a.active === b.hasMoney)
);

console.log(people);
.as-console-wrapper { max-height: 100% !important; top: 0; }

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...