1

这应该是一件超级简单的事情,但我在解决这个问题时遇到了问题。我正在尝试实现一种将所有一种类型的对象移动到列表顶部的排序。例如,一个任务列表,我想对其进行排序,以便特定所有者的所有任务都显示在列表的顶部。这就是我现在所拥有的:

    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/

4

2 回答 2

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)
    })
}
于 2012-09-21T18:46:49.680 回答
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)
    })
}
于 2012-09-21T18:48:08.607 回答