按数组排序并保持顺序

Dan*_*Dan 0 javascript arrays sorting

我有这样的数据:

var data = [
  ['a', 2010], ['a', 2011], ['a', 2012],
  ['b', 2010], ['b', 2012], ['b', 2013],
  ['c', 2010], ['c', 2011], ['c', 2012],['c', 2013]
]
Run Code Online (Sandbox Code Playgroud)

我希望按年对这个数组进行排序但是保持数据的顺序,所以输出将是:

var data = [
  ['a', 2010], ['b', 2010], ['c', 2010], 
  ['a', 2011], ['c', 2011], 
  ['a', 2012], ['b', 2012], ['c', 2012],
  ['b', 2013], ['c', 2013]
]
Run Code Online (Sandbox Code Playgroud)

如您所见,每个数据(a,b,c)并不总是包含每年的数据(如2011年的b或2013年的数据)

如果我使用sort()函数,它会按年份排序,但不按顺序排序.

var data = [
  ['a', 2010], ['a', 2011], ['a', 2012],
  ['b', 2010], ['b', 2012], ['b', 2013],
  ['c', 2010], ['c', 2011], ['c', 2012],['c', 2013]
]
var newData = data.sort(function(a, b) {
  return a[1] - b[1]
})
    
  console.log(newData)
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

tri*_*cot 5

添加表达式来处理关系:如果a[1] - b[1]为零,则应指定顺序,然后由第一个元素确定:

var data = [
  ['a', 2010], ['b', 2011], ['c', 2012],
  ['b', 2010], ['b', 2012], ['b', 2013],
  ['c', 2010], ['c', 2011], ['c', 2012],['c', 2013]
]
var newData = data.sort(function(a, b) {
  return a[1] - b[1] || a[0].localeCompare(b[0]);
});
      
console.log(newData)
Run Code Online (Sandbox Code Playgroud)