2014-03-31 33 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