我写了一个函数对我的自定义卡类进行排序,它完全按预期工作。然后,我尝试保存该函数以供重复使用,但是一旦这样做,使用它就会得到完全不同的结果。
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};
}
此行为的原因是什么?有没有一种方法可以保存排序功能并使它按我的预期方式工作?
答案 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;
};