我正在尝试对一个由数字或字符串值混合而成的值数组进行排序(例如
我的字符串排序算法(参见jsFiddle)存在问题,我无法找到一种方法始终将
[10,"20",null,"1","bar","-2",-3,null,5,"foo"]
)。如何排序此数组,以使
-
null
值总是放在最后(无论排序顺序如何,详见 jsFiddle) - 负数被正确排序(即它们小于正数,并在自身之间正确排序)
localeCompare
和numeric
选项),但以下是我的排序算法的数字版本,以供参考。// Sorting order
var order = "asc"; // Try switching between "asc" and "dsc"
// Dummy arrays
var numericArr = [10,20,null,1,-2,-3,null,5];
// Sort arrays
$(".output1").append(numericArr.toString());
numericArr.sort(sortByDataNumeric);
$(".output2").append(numericArr.toString());
// Numeric sorting function
function sortByDataNumeric(a, b, _order) {
// Replace internal parameters if not used
if (_order == null) _order = order;
// If values are null, place them at the end
var dflt = (_order == "asc" ? Number.MAX_VALUE : -Number.MAX_VALUE);
// Numeric values
var aVal = (a == null ? dflt : a);
var bVal = (b == null ? dflt : b);
return _order == "asc" ? (aVal - bVal) : (bVal - aVal);
}
我的字符串排序算法(参见jsFiddle)存在问题,我无法找到一种方法始终将
null
值放置在最后,并且负值在自身内部未正确排序(例如,-3应该小于-2)。
编辑
回答评论,我希望[10,"20",null,"1","bar","-2",-3,null,5,"foo"]
排序为[-3,"-2","1",5,10,"20","bar","foo",null,null]
。
"bar"
应该怎么处理?它既不是数字,也不是数值字符串,也不是null
。 - Bergi