我有这样的数据:
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)
我怎样才能做到这一点?
答案 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)