如何修改此函数以包含ascendent和descendent功能?

时间:2014-08-04 08:36:51

标签: javascript jquery html

我想命令后代我的表,所以我有这个功能上升:

var compareUser = function (a, b) {
        if (a.username < b.username) {
            return -1;
        }
        else if (a.username > b.username) {
            return 1;
        }
        return 0;

    };

如何修改它以包含后代/上升函数?

这就是我调用函数的方式:

      $(".theadUser").on('click', function () {
        userData.sort(compareUser);
        $('.theadUser').removeClass('headerUnSorted');
        $('.theadUser').addClass('headerAsc');
        console.log(userData);
        $("#users").html('');
        buildTable();
    });

我希望当我先点击按钮来命令上升时,当我再次点击命令后代时。

1 个答案:

答案 0 :(得分:2)

考虑一个可用于创建“反向”比较函数的函数:

function reverseCompare (fn) {
    return function (a, b) {
        // call original, reverse result
        return fn(a, b) * -1;
        // alternative as suggested by Alnitak, reverse arguments
        // return fn(b, a)
    }
}

在基本形式中,它可以像这样使用:

userData.sort(compareUser);                 // ascending/normal
userData.sort(reverseCompare(compareUser)); // descending/reversed

应用于代码,它可能是这样的:

var $t = $('.theadUser');
var sortedAsc = $t.hasClass('headerAsc');
if (!sortedAsc) {
   // not current sorted ascending, sort ascending
   userData.sort(compareUser);
   $t.removeClass('headerUnSorted headerDesc')
     .addClass('headerAsc');
} else {
   userData.sort(reverseCompare(compareUser));
   $t.removeClass('headerUnSorted headerAsc')
     .addClass('headerDesc');
}