如何添加排序函数条件,将所有空白项排序到列表的末尾?
How can I add a sort function condition that will sort all the blank entries to the end of the list?
我正在排序一个对象数组,其中包含一个主要联系人姓名。有时它有一个空白值,当我使用下面的函数时,它会正确地对它进行排序,但是所有的空白都在列表的顶部而不是底部。我原以为添加如下所示的条件就可以了,但事实并非如此。
this.comparePrimaryContactName = function (a, b)
{
if(a.PrimaryContactName == "") return -1;
return a.PrimaryContactName > b.PrimaryContactName ? 1 : -1;
}
我错过了什么?
我通常这样使用:
this.comparePrimaryContactName = function(a, b) {
a = a.PrimaryContactName || '';
b = b.PrimaryContactName || '';
if(a.length == 0 && b.length == 0)
return 0;
else if(a.length == 0)
return 1;
else if(b.length == 0)
return -1;
else if(a > b)
return 1;
else if(a < b)
return -1;
return 0;
}
比较函数必须是反射的、传递的和反对称的。你的函数不满足这些条件。例如,如果两个空白条目相互比较,则必须返回0,而不是-1。
this.comparePrimaryContactName = function (a, b)
{
var aName = a.PrimaryContactName;
var bName = b.PrimaryContactName;
return aName === bName ? 0 :
aName.length===0 ? -1 :
bName.length===0 ? 1 :
aName > bName ? 1 : -1;
}
对空格返回1而不是-1。
this.comparePrimaryContactName = function (a, b) {
if (a.PrimaryContactName == b.PrimaryContactName)
return 0;
if(a.PrimaryContactName == "") return 1;
return a.PrimaryContactName > b.PrimaryContactName ? 1 : -1;
}
如果两者相等,排序函数应该返回0,如果a在b之前,返回-1,如果a在b之后,返回1。
查看MDN排序文档获取更多信息。
相关文章:
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 使用promise和mongoose对文档进行排序
- Selectize.js:如何对整数值的选项进行排序
- Javascript排序的图像弹出窗口..可以't单独弹出
- 如何删除多行HTML排列中的空白
- 在Twitter上用ie9中的空白src访问iframe的contentWindow
- 不同浏览器中的空白字符正则表达式行为
- Javascript中的空白是什么
- 如何通过引用var Using DataTables来进行分页或排序
- Facebook共享显示一个接一个的空白页面
- 如果我在javascript中输入无效的电子邮件或空白,如何显示特定的文本框边框红色
- 为什么HTML5拖放的目标是孩子?(可排序列表)
- AngularJs对所有页面中的所有记录进行排序
- 当属性不一致时,如何根据属性对JS对象列表进行排序
- 按从高到低对多个int变量进行排序
- jQuery UI可排序-多连接列表拖动
- 对DataTable jquery进行排序,排除文本字段中的空白
- 排序javascript数组,使空白值总是在底部
- 如何添加排序函数条件,将所有空白项排序到列表的末尾?
- Rubaxa可排序,在行内元素右侧的空白位置放置