按键降序谷歌浏览器排序Javascript数组

时间:2014-03-31 10:31:27

标签: javascript arrays google-chrome sorting

我有一个数组,需要按键按降序对其进行排序。 一切都在Firefox中运行良好,但在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})

所以在Firefox中它会返回正确的结果

[["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]]

但是在Google Chrome浏览器中它只显示相同的

1 个答案:

答案 0 :(得分: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)})