2014-03-31 34 views
0

我有一個數組,需要按鍵降序排序。 所有在Firefox中工作良好,但在Chrome它顯示在原來的順序按排序鍵排列Google Chrome

[["0", 0], ["1", 0.9], ["2", 597.5344192965547], ["3", 991.0326954186761], ["4", 1257.2580315846578], ["5", 1293.5250901880618], ["6", 2197.1091224116512], ["7", 2225.0422585266947], ["8", 3964.1307816747044], ["9", 6914.072436146399]] 

這是我使用

sortable.sort(function(a,b){return b-a}) 

所以它返回正確的結果

[["9", 6914.072436146399], ["8", 3964.1307816747044], ["7", 2225.0422585266947], ["6", 2197.1091224116512], ["5", 1293.5250901880618], ["4", 1257.2580315846578], ["3", 991.0326954186761], ["2", 597.5344192965547], ["1", 0.9], ["0", 0]] 
代碼在Firefox

但在谷歌鉻它只是顯示相同

+0

您有一個數組數組。你期望什麼(例如)'[「0」,0] - [「1」,0.9]'是什麼意思?這就是你的'b - a'歸結爲(某種程度上),假設'sortable'指向你的外部數組。 –

回答

3

你有一組數組。假設sortable引用外部數組,您的排序函數最終使用-陣列實例。例如,在您致電sort的某個時刻,您的排序功能是使用數組["0", 0]["1", 0.9]調用的。所以,你的做到這一點在功能:

return ["0", 0] - ["1", 0.9]; 

這些兩個操作數使用-將導致JavaScript引擎試圖將這些操作數爲數字,幾乎可以肯定導致NaNNaN - NaNNaN,這不是排序比較器回調應該返回的事情之一。

我懷疑你想在從屬數組中的第一項,這樣的排序:

sortable.sort(function(a,b){return b[0]-a[0]}) 

(請注意:每個[0])。這將讓那些在各個下屬第一項字符串數組並將它們傳遞給-,這會將它們隱式強制爲數字。如果需要,還可以明確並強制使用特定的基數:

sortable.sort(function(a,b){return parseInt(b[0], 10) - parseInt(a[0], 10)}) 
+0

你是不是錯過了'parseInt'什麼的? ;) – thefourtheye

+0

@thefourtheye:可能需要也可能不需要。 '-'會強迫數字。但我會添加它。 –

+0

哦,是的,你是對的。 「ToPrimitive」會照顧到這一點。 +1 – thefourtheye