这应该是一个非常简单的事情,但我遇到了一个问题。我试图实现一种排序,将所有类型的对象移动到列表的顶部。例如,一个任务列表,我想对其进行排序,以便特定所有者的所有任务都显示在列表的顶部。这就是我现在所拥有的:
this.sortByOwner = function(owner) {
return tasks.sort(function(a, b) {
var nameA = a.ownerUser.displayName.toLowerCase();
var nameB = b.ownerUser.displayName.toLowerCase();
var displayName = owner.displayName.toLowerCase();
if (nameA == displayName) //sort string descending
return -1;
else if (nameA == "")
return 1;
return 0; //default return value (no sorting)
});
};
但这不太正常。他们似乎确实正在对任务进行分组,但不幸的是,用户任务没有出现在顶部。我期望看到的是特定人所拥有的任务将出现在顶部。我在这做错了什么?
包含一个基本的JSFiddle示例:http://jsfiddle.net/zJwUn/5/
答案 0 :(得分:4)
您没有处理nameB
是displayName
的情况。这对我有用:
function sortByOwner(owner) {
return tasks.sort(function(a, b){
var nameA=a.displayName.toLowerCase(), nameB=b.displayName.toLowerCase();
var displayName = owner.displayName.toLowerCase();
if (nameA == displayName) //sort string descending
return -1;
if (nameA == "")
return 1;
if (nameB == displayName) //sort string descending
return 1;
if (nameB == "")
return -1;
return 0; //default return value (no sorting)
})
}
答案 1 :(得分:2)
您缺少至少一张支票,即nameB是所有者的情况。
这是你小提琴的固定版本
function sortByOwner(owner) {
return tasks.sort(function (a, b) {
var nameA = a.displayName.toLowerCase(),
nameB = b.displayName.toLowerCase();
var displayName = owner.displayName.toLowerCase();
if (nameA === nameB) return 0;
if (nameA == displayName) //sort string descending
return -1;
if (nameB == displayName)
return 1;
// at this point neither A or B are the owner
if (nameA == "") return 1;
if (nameB == "") return -1;
return 0 //default return value (no sorting)
})
}