存储排序功能更改结果

时间:2019-04-23 15:25:11

标签: javascript sorting

我写了一个函数对我的自定义卡类进行排序,它完全按预期工作。然后,我尝试保存该函数以供重复使用,但是一旦这样做,使用它就会得到完全不同的结果。

myCards.sort(function(a, b){return card.CountRanks(fiveCards, true)[a.rank] != card.CountRanks(fiveCards, true)[b.rank] ? card.CountRanks(fiveCards, true)[b.rank] - card.CountRanks(fiveCards, true)[a.rank] : a.rank != b.rank ? b.rank - a.rank : b.suit - a.suit});
//Sorts exactly as intended

myCards.sort(card.pokerSort());
//Sorts quite differently

static pokerSort(){ //Within the card class
    return function(a, b){return card.CountRanks(fiveCards, true)[a.rank] != card.CountRanks(fiveCards, true)[b.rank] ? card.CountRanks(fiveCards, true)[b.rank] - card.CountRanks(fiveCards, true)[a.rank] : a.rank != b.rank ? b.rank - a.rank : b.suit - a.suit};
}

此行为的原因是什么?有没有一种方法可以保存排序功能并使它按我的预期方式工作?

2 个答案:

答案 0 :(得分:2)

transform_to本身必须采用以下参数:

pokerSort

或者您必须传递调用它的结果(该函数带有a和b):

 static pokerSort(a, b) {

注意:

按照惯例,类以大写字母( myCards.sort(card.pokerSort()) )开头,而方法则不是(Card)。

换行符确实使代码易于阅读。

如果要将0替换为其他值,则OR运算符非常有用:

countRanks

答案 1 :(得分:0)

顺便说一句,您可以将排序顺序链接起来。

card.pokerSort = function (a, b) {
    return card.CountRanks(fiveCards, true)[a.rank] - card.CountRanks(fiveCards, true)[b.rank]
        || b.rank - a.rank
        || b.suit - a.suit;
};