JavaScript sort array by multiple (number) fields JavaScript sort array by multiple (number) fields json json

JavaScript sort array by multiple (number) fields


You should design your sorting function accordingly:

items.sort(function(a, b) {  return a.sort1 - b.sort1  ||  a.sort2 - b.sort2;});

(because || operator has lower precedence than - one, it's not necessary to use parenthesis here).

The logic is simple: if a.sort1 - b.sort1 expression evaluates to 0 (so these properties are equal), it will proceed with evaluating || expression - and return the result of a.sort2 - b.sort2.

As a sidenote, your items is actually a string literal, you have to JSON.parse to get an array:

const itemsStr = `[{    "sort1": 1,    "sort2": 3,    "name": "a"  },  {    "sort1": 1,    "sort2": 2,    "name": "b"  },  {    "sort1": 2,    "sort2": 1,    "name": "c"  }]`;const items = JSON.parse(itemsStr);items.sort((a, b) => a.sort1 - b.sort1 || a.sort2 - b.sort2);console.log(items);