Если масти не собираются меняться, то самый быстрый способ создать это - не иметь петли, просто жестко закодировать массив:
function mkDeck() {
return [
'2s', '3s', '4s', '5s', '6s', '7s', '8s', '9s', '10s', '11s', '12s', '13s', '14s',
'2h', '3h', '4h', '5h', '6h', '7h', '8h', '9h', '10h', '11h', '12h', '13h', '14h',
'2d', '3d', '4d', '5d', '6d', '7d', '8d', '9d', '10d', '11d', '12d', '13d', '14d',
'2c', '3c', '4c', '5c', '6c', '7c', '8c', '9c', '10c', '11c', '12c', '13c', '14c',
];
}
Если карты, которые необходимобыть удаленными всегда будут одинаковыми, тогда вы можете просто исключить их из этого жестко запрограммированного массива.
function mkDeck() {
return [
'2s', '3s', '4s', '5s', '6s', '7s', '8s', '9s', '12s', '13s', '14s',
'2h', '3h', '4h', '5h', '6h', '7h', '8h', '9h', '10h', '11h', '12h', '14h',
'2d', '3d', '4d', '5d', '6d', '7d', '8d', '9d', '10d', '11d', '12d', '13d', '14d',
'2c', '3c', '4c', '5c', '6c', '7c', '8c', '10c', '11c', '12c', '13c', '14c',
];
}
Это несколько раз обрывает зацикливание над колодой.Итак, весь код, который у вас остался:
let deck = mkDeck();
shuffle(deck);
Если вместо этого карты для удаления являются динамическими, их проще исключить при создании колоды, а не искать их после, таким образом, вы толькоЗацикливайтесь на колоде один раз - при генерации:
const suits = ['s', 'h', 'd', 'c'];
const remove = ['10s', '11s', '13h', '9c'];
var deck = mkDeck();
console.log(deck);
function mkDeck() {
let arr = [];
for (let s = 0; s < 4; s++) {
for (let i = 2; i < 15; i++) {
let card = i + suits[s];
//only add if it should be added
if (!remove.includes(card)) {
arr.push(card);
}
}
}
return arr;
}
Это может быть даже быстрее, если remove
был объектом { '10s': true, '11s': true, '13h': true, '9c': true };
или набором new Set(['10s', '11s', '13h', '9c'])
.В любом случае поискам не нужно было бы перебирать весь массив для каждой сгенерированной вами карты.