[10,"20",null,"1","bar","-2",-3,null,5,"foo"]
我正在尝试对可以是数字或字符串值(例如)的混合值的数组进行排序。我怎样才能对这个数组进行排序,这样
null
值总是放在最后(不管排序顺序,参见 jsFiddle)- 负数被正确排序(即它们小于正数并且在它们之间正确排序)
? 我用详细的数字和字符串示例(使用和选项)制作了一个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]