1

I a data structure shaped like

[{name:"kevin",major:1, minor:2}]

How would I sort a list of these objects if I wanted them to be sorted such that they the majors are in order and the minors are sorted secondarily?

meek milly
  • 25
  • 3
  • 3
    Duplicate http://stackoverflow.com/questions/10153846/sorting-an-array-of-objects-by-two-properties – phenxd Feb 17 '16 at 19:35
  • [`Array.sort`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort). Notice the examples of compare functions. – Teemu Feb 17 '16 at 19:36

2 Answers2

2

Just define a sort callback.

var myData = [{ name: "kevin", major: 1, minor: 2 }, { name: "bob", major: 1, minor: 1 }, { name: "dave", major: 2, minor: 1 }, { name: "john", major: 2, minor: 2 }];
myData.sort(function (a, b) {
    return a.major - b.major || a.minor - b.minor;
});
document.write('<pre>' + JSON.stringify(myData, 0, 4) + '</pre>');
Nina Scholz
  • 376,160
  • 25
  • 347
  • 392
0

Here you go:

var myData = [{
  name: "kevin",
  major: 1,
  minor: 2
}, {
  name: "bob",
  major: 1,
  minor: 1
}, {
  name: "dave",
  major: 2,
  minor: 1
}, {
  name: "john",
  major: 2,
  minor: 2
}];

var mySort = function(a, b) {
  if (a.major == b.major) {
    return a.minor - b.minor;
  } else {
    return a.major - b.major;
  }
};


document.getElementById("results").innerHTML = JSON.stringify(myData.sort(mySort));
<div id="results"></div>
rphv
  • 5,409
  • 3
  • 29
  • 47