对javascript数组进行排序,使空白值始终位于底部

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)

Rob*_*nik 5

最后是空字符串

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)