按参数排序

时间:2012-09-21 18:22:24

标签: javascript sorting

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

    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/

2 个答案:

答案 0 :(得分:4)

您没有处理nameBdisplayName的情况。这对我有用:

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)
    })
}