2014-01-31 72 views
0

我有一個名爲generationArray的數組。生成數組內的每個數組都是252個位置的數組。頭250個職位是內部代碼的東西,最後兩個職位代表我的排序標準。 陣列的最後一個位置是boolean,之前的位置是一個數字。如何對數組的複雜javascript數組進行排序?

我需要先訂購這個generationArray首先是所有的truefalse它的數組值然後是數值。如果最後一個位置是第一個較大數字的真實順序,如果最後一個位置是第一個較小數字的錯誤順序。

這是一個例子,假設generationArray有5個數組。

generationArray[0][last] == false 
generationArray[0][last-1] == 350 

generationArray[1][last] == true 
generationArray[1][last-1] == 300 

generationArray[2][last] == true 
generationArray[2][last-1] == 250 

generationArray[3][last] == false 
generationArray[3][last-1] == 380 

generationArray[4][last] == true 
generationArray[4][last-1] == 290 

它必須責令像

generationArray[0][last] == true 
generationArray[0][last-1] == 300 

generationArray[1][last] == true 
generationArray[1][last-1] == 290 

generationArray[2][last] == true 
generationArray[2][last-1] == 250 

generationArray[3][last] == false 
generationArray[3][last-1] == 350 

generationArray[4][last] == false 
generationArray[4][last-1] == 380 

如何實現這樣做在Javascript?

+0

它總是一個正數嗎? – Bergi

+0

是的,這是一個正在減少的遊戲計時器,所以最低可能值爲零。 – steps

回答

0

這應做到:

generationArray.sort(function(a, b) { 
    return b[251]-a[251] || (a[251]*2-1)*(b[250]-a[250]); 
}) 
  • b[251]-a[251]鑄布爾以整數並對它們進行比較,前falses
  • 如果在0成果,||將被評估
  • b[250]-a[250]true小號compares the ints,再次大值首先
  • ,但是如果布爾值爲false,則(a[251]*2-1)*會反轉該順序。

由於您的號碼始終爲正,一個也許更常見的/更容易理解的解決辦法是把它的布爾伴侶是true爲負數。您甚至可以簡單地重構您的數據以使用該模式。那麼你所要做的只是一個數字排序:

generationArray.sort(function(a, b) { 
    return (a[251]?-a[250]:+a[250]) - (b[251]?-b[250]:+b[250]); 
})