我试图在纸牌游戏中对用户卡进行排序,例如所有用户的牌彼此靠近。 我用这个:
p1cards是一个包含" c8"," d9"," h1"等元素的数组,字母代表卡片符号(Club,Diamond,Hearts)和number是卡值(1是Ace,2是2,依此类推)
p1cards.sort(sortOrder);
function sortOrder(a,b)
{
var aN = parseInt(a.substr(1));
var bN = parseInt(b.substr(1));
if (aN > bN)
{
return 1;
}
else
{
return -1;
}
}
问题在于,当我画一张新卡时,像8d,8c这样的分类卡正在切换到8c,8d,这种随机的类型。
任何帮助都会被贬低。
见下图:
答案 0 :(得分:1)
如果您有不满意的未定义行为,只需定义您喜欢的行为。
在您的情况下,如果两个数字相同,则另外评估卡片符号。 这使得两张卡片的顺序清晰明了,排序操作(对于这两张卡片)是幂等的。
答案 1 :(得分:1)
您不能在排序中定义当值相同时要执行的操作,因此根据哪个项目插入a
以及哪个b
(您无法控制)将确定订单。告诉您的排序功能当项目相同时该怎么做:
function sortOrder(a,b)
{
var aN = parseInt(a.substr(1));
var bN = parseInt(b.substr(1));
if(aN == bN){
//they are the same, so add a secondary sort based off suit
var aS = a.substr(0,1); //grab the first character which is the suit
var bS = b.substr(0,1);
if(aS > bS) return 1;
if(bS > aS) return -1;
return 0;
}
if (aN > bN)
{
return 1;
}
else
{
return -1;
}
}