JS sort()将空值排在最后

23

我有一个像这样的JS排序:

records.sort(function(a, b) {
    if (a < b) return -1;
    if (a > b) return 1;
    return 0;
});

这个方法是有效的,但我的一些记录是""或者null

空记录列在最前面,但我希望它们在最后面。

我认为有比这更好的方法:

if (a == "") a = "zzzz";

但是我该如何做到这一点?


1
https://dev59.com/410a5IYBdhLWcg3w48Ln - Ofir Baruch
3个回答

39

也许可以这样做:

records.sort(function(a, b) {
    if(a === "" || a === null) return 1;
    if(b === "" || b === null) return -1;
    if(a === b) return 0;
    return a < b ? -1 : 1;
});

2
能用图解释一下吗? - Usman Iqbal

4
records.sort((a,b) => a ? b ? a.localeCompare(b) : -1 : 1);

Eric Hotinger的答案的ES6一行版本

2

简化的方式:

['a', '!', 'z','Z', null, undefined, '']
.sort((a, b) => !a ? 1 : (!b ? -1 : (a.localeCompare(b))) )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接