2017-04-15 493 views
0

我有這樣的數據:排序由數組和保持秩序

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)並不總是有每年的數據(如b。對於2011或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

你似乎想排序兩個參數而不是「保持訂單」。 – RobG

回答

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)

+0

完美的作品!謝謝! – Dan