按数组排序并保持顺序

时间:2017-04-15 06:40:25

标签: 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]
]

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

var data = [
  ['a', 2010], ['b', 2010], ['c', 2010], 
  ['a', 2011], ['c', 2011], 
  ['a', 2012], ['b', 2012], ['c', 2012],
  ['b', 2013], ['c', 2013]
]

如您所见,每个数据(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)

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:5)

添加表达式来处理 tie :如果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)