1

I have an array

var arr = [
    0:{region:2, saved: false, damage:-1}
    1:{region:1, saved: true, damage:2}
    2:{region:1, saved: false, damage:-1}
    3:{region:1, saved: true, damage:4}
    4:{region:2, saved: true, damage:3}
    5:{region:-1, saved: false, damage:-1}
    6:{region:3, saved: false, damage:-1}
];

I need to apply sorting like first with the region (increment order), within the same region unsaved comes first, after that as per the damage in decremented order.

Output should be like this

    arr =[0:{region:-1, saved: false, damage:-1}
 1:{region:1, saved: false, damage:-1}
 2:{region:1, saved: true, damage:4}
3:{region:1, saved: true, damage:2}
4:{region:2, saved: false, damage:-1}
5:{region:2, saved: true, damage:3}
6:{region:3, saved: false, damage:-1}];

Please help with a sort function in JavaScript.

1 Answers1

0

You can use a OR condition in your Array.sort() function:

var arr= [
  {region:2, saved: false, damage:-1},
  {region:1, saved: true, damage:2},
  {region:1, saved: false, damage:-1},
  {region:1, saved: true, damage:4},
  {region:2, saved: true, damage:3},
  {region:-1, saved: false, damage:-1},
  {region:3, saved: false, damage:-1}
];
arr.sort(function(a, b){
   return a.region - b.region || a.saved - b.saved || b.damage - a.damage;
});

console.log(arr);
Ankit Agarwal
  • 30,378
  • 5
  • 37
  • 62