Сохранение функции сортировки изменяет результаты - PullRequest
0 голосов
/ 23 апреля 2019

Я написал функцию для сортировки своего класса карточек, и она работала точно так, как предполагалось.Затем я попытался сохранить функцию для повторного использования, но как только я это сделал, ее использование дало совершенно другие результаты.

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 ]

2 голосов
/ 23 апреля 2019

pokerSort сам должен принимать параметры:

 static pokerSort(a, b) {

Или вы должны передать результат вызова (функция принимает a и b):

 myCards.sort(card.pokerSort())

Примечания:

По соглашению классы начинаются с заглавной буквы (Card), а методы - нет (countRanks).

Новые строки делают ваш код более читабельным..

Оператор OR действительно полезен, если вы хотите заменить 0 на что-то другое:

 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
  );
 }
0 голосов
/ 23 апреля 2019

Кстати, вы можете цепочку порядка сортировки.

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;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...