Chr*_*s J 11 javascript sorting
所以我有一个只包含字符串的数组.数组数组将显示为一个表,并且可能包含超过1000行,每行包含20个或更多值.
例如:
var arr = [
["bob","12","yes"],
["joe","","no"],
["tim","19","no"],
["dan","","yes"],
["tim","",""],
["dan","0",""]
]
Run Code Online (Sandbox Code Playgroud)
字符串可以包含任何可以表示为一个字符串,包括:" ","","0"或"00-00-00"等...和我用于排序任何列.
我正在对数组进行升序和降序排序,但我排序的一些值是空字符串:"".在所有现代浏览器中,如何让空字符串(仅)始终位于新数组的末尾?
目前他们在上升时结束,但在下降时开始.
我在下面排序(是的,我确定我也可以做得更短):
if (direction == "asc") {
SortedArr = arr.sort(function (a, b) {
if (a[colToSortBy] == '') {
return -1;
}
if (a[colToSortBy].toUpperCase() < b[colToSortBy].toUpperCase()) {
return -1;
}
if (a[colToSortBy].toUpperCase() > b[colToSortBy].toUpperCase()) {
return 1;
}
return 0;
});
} else {
SortedArr = arr.sort(function (a, b) {
if (a[colToSortBy] == '') {
return -1;
}
if (b[colToSortBy].toUpperCase() < a[colToSortBy].toUpperCase()) {
return -1;
}
if (b[colToSortBy].toUpperCase() > a[colToSortBy].toUpperCase()) {
return 1;
}
return 0;
});
}
Run Code Online (Sandbox Code Playgroud)
JSFiddle上的工作示例,无论顺序是升序还是降序,总是将空字符串放在最后.这可能是一个可用性问题,但这是解决方案:
if (direction == "asc") {
SortedArr = arr.sort(function (a, b) {
return (a[col] || "|||").toUpperCase().localeCompare((b[col] || "|||").toUpperCase())
});
} else {
SortedArr = arr.sort(function (a, b) {
return (b[col] || "!!!").toUpperCase().localeCompare((a[col] || "!!!").toUpperCase())
});
}
Run Code Online (Sandbox Code Playgroud)