ActionScript 3对数字和字母不按预期工作的数组进行排序

时间:2015-04-25 16:06:12

标签: arrays actionscript-3

我试图在纸牌游戏中对用户卡进行排序,例如所有用户的牌彼此靠近。 我用这个:

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,这种随机的类型。

任何帮助都会被贬低。

见下图:

http://i.stack.imgur.com/2Ticj.jpg

2 个答案:

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