js排序

如何用JS写一个算法,总的三副牌,162张扑克,玩家手里牌40张,按同心(三个花色牌值一样),然后炸弹(四个牌值一样以上),三张,对子,单牌的优先级排序。

// 定义扑克牌
let poker = [];
for (let i = 0; i < 3; i++) {
    for (let j = 1; j <= 54; j++) {
        poker.push({suit: i, value: j});
    }
}

// 玩家手中的牌
let playerHand = [];
for (let i = 0; i < 40; i++) {
    playerHand.push(poker.shift());
}

// 按照花色和牌值进行排序
playerHand.sort((a, b) => {
    if (a.suit !== b.suit) {
        return a.suit - b.suit;
    } else {
        return a.value - b.value;
    }
});

// 排序函数
function sortCards(cards) {
    let groups = {};
    let sortedCards = [];

    // 根据牌值分组
    for (let card of cards) {
        let value = card.value;
        if (!groups[value]) {
            groups[value] = [];
        }
        groups[value].push(card);
    }

    // 同心
    let sameSuitValues = Object.keys(groups).sort((a, b) => b - a);
    for (let value of sameSuitValues) {
        let group = groups[value];
        if (group.length >= 3) {
            sortedCards.push(...group);
            delete groups[value];
        }
    }

    // 炸弹
    let bombValues = Object.keys(groups).sort((a, b) => b - a);
    for (let value of bombValues) {
        let group = groups[value];
        if (group.length >= 4) {
            sortedCards.push(...group);
            delete groups[value];
        }
    }

    // 三张
    for (let value of bombValues) {
        let group = groups[value];
        if (group.length >= 3) {
            sortedCards.push(...group);
            delete groups[value];
        }
    }

    // 对子
    for (let value of bombValues) {
        let group = groups[value];
        if (group.length >= 2) {
            sortedCards.push(...group);
            delete groups[value];
        }
    }

    // 单牌
    for (let value of bombValues) {
        let group = groups[value];
        if (group.length >= 1) {
            sortedCards.push(...group);
            delete groups[value];
        }
    }

    return sortedCards;
}

console.log(sortCards(playerHand));

(帖子被作者删除,如无标记将在 24 小时后自动删除)

(帖子被作者删除,如无标记将在 24 小时后自动删除)

。。。建议先学点js基础