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