2014-05-14 70 views
0

使用Javascript,我想對整數數組進行排序,但不是從0開始,而是希望能夠指定數組中的第一項。例如,使用這個數組作爲一個起點:排序數組並指定起始位置

var array = [4, 0, 1, 2, 5, 8, 7, 3, 6]; 

如果我要重新排序,但在3日開始,與最終的結果:

var array = [3, 4, 5, 6, 7, 8, 0, 1, 2]; 

開始在8應該是這樣的:

var array = [8, 0, 1, 2, 3, 4, 5, 6, 7]; 

從0開始是這樣的(默認排序):

var array = [0, 1, 2, 3, 4, 5, 6, 7, 8]; 

任何想法我可以做到這一點? 謝謝。

+1

你是什麼意思?訂購不會在某處「開始」。你想排序數組,然後旋轉它直到'2'在前面? – Bergi

回答

2

這應做到:

array.sort(function(a, b) { 
    return (a<2) - (b<2) || a - b; 
}); 

取決於ab是否比21-1,或者0如果兩者都對2相同的「側」的第一條件返回,在這種情況下,第二次(standard number)比較發生。

+0

您能解釋當'a'或'b'是什麼時候'(a <2)「或」(b <2) 5?起初我以爲它會返回'true'或'false',但是這樣做沒有意義,因爲您之後正在計算返回的值?謝謝! – Robin

+0

@codezombie:你可以用布爾值計算,它們在被減去時會被轉換爲'0' /'1'。 – Bergi

+0

感謝您的回答!到目前爲止還不知道! :-)但是如果'(a <2)'和'(b <2)'都是真的,它就是'0 - 0',這會產生'0'並且等於'true',不是嗎?在那種情況下,爲什麼使用第二個語句而不是返回「true」? @Bergi – Robin

0

這是怎麼回事?

var array = [3, 4, 0, 1, 2, 5]; 

var startNumber = 2; 
var test = array.sort(function(a, b) { 
    if(b < startNumber) { 
     return -1; 
    } else if(a < startNumber) { 
     return 1; 
    } else { 
     return a - b; 
    } 
}); 

// test == [2, 3, 4, 5, 0, 1] 
+0

請注意,這會使'0'和'1'未排序 – Bergi

0

我不太清楚你想達到什麼,因爲在你的原始數組01已經排序。
假設要整個陣列進行排序,然後轉移陣列把前兩個元素的結束時,可以使用此代碼:

var array = [3, 4, 0, 1, 2, 5]; 
array = array.sort(); 
i = array.indexOf(2); 
move = array.splice(0, i); 
array.splice(array.length, 0, move); 
alert(array); 

演示是here