对JavaScript数组进行排序,使得空值总是在底部

前端之家收集整理的这篇文章主要介绍了对JavaScript数组进行排序,使得空值总是在底部前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我有一个只包含字符串的数组.
阵列阵列将显示为一个表,并且可能有超过1000行,每个行中有20个或更多的值.

例如:

var arr = [
    ["bob","12","yes"],["joe","","no"],["tim","19",["dan",""],"0",""]
]

字符串可以包含可以表示为字符串的任何东西,包括:“”,“”,“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;
    });
}

解决方法

空字符串结束

Working example在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())
    });
}

猜你在找的JavaScript相关文章