Javascript 存储排序函数更改结果

Javascript 存储排序函数更改结果,javascript,sorting,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.CountRank

我编写了一个函数来对自定义卡类进行排序,它完全按照预期的方式工作。然后我试图保存该函数以供重复使用,但一旦保存,使用它就会产生完全不同的结果

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

这种行为的原因是什么?有没有办法保存排序函数并使其按我所希望的方式工作?

扑克排序
本身必须采用以下参数:

 static pokerSort(a, b) {
或者您必须传递调用它的结果(取a和b的函数):


注:

按照惯例,类以大写字母(
Card
)开头,而方法不以大写字母(
countRanks
)开头

换行符确实使您的代码更具可读性

如果要用其他内容替换0,则OR运算符非常有用:

 static pokerSort(a, b) {
   const ranks = Card.countRanks(fiveCards, true);
   return (
     ranks[a.rank] - ranks[b.rank] ||  
     b.rank - a.rank ||
     b.suit - a.suit
  );
 }

顺便说一句,你可以把排序的顺序串起来

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

请添加一些数据和您正在排序的方案。
pokerSort
是一个返回函数的函数。但是它不应该返回一个函数,它应该接受两个参数并返回一个数字以其编写方式….
保存函数以供重复使用
讽刺的是,创建函数来创建函数并不能做到这一点:)您是不喜欢\n还是讨厌可读代码?
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;
};