これが何であるかを説明するのに良いタイトルを付けるのは困難でしたが、それは私が思いついた最高のものです。とにかく、これは単にカードのデッキを作成し、次にホールカードを削除します。この新しいデッキの作成、シャッフル、ホールカードの削除を何千回も繰り返す必要があるため、パフォーマンスは非常に重要です。
デッキの作成は非常に高速ですが、JSで要素を削除する簡単な方法が見つからないため、ホールカードの削除機能はパフォーマンスに大きな打撃を与えます。
const suits = ['s', 'h', 'd', 'c'];
const remove = ['10s', '11s', '13h', '9c'];
var deck = mkDeck();
shuffle(deck)
rmvHole();
// Functions
function rmvHole() {
for (let i = 0; i < remove.length; i++) {
const key = Object.keys(deck).find(key => deck[key] === remove[i]);
deck[key] = null;
}
}
function mkDeck() {
let arr = [];
for (let s = 0; s < 4; s++) {
for (let i = 2; i < 15; i++) {
arr.push(i + suits[s]);
}
}
return arr;
}
function shuffle(a) {
for (let i = a.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[a[i], a[j]] = [a[j], a[i]];
}
return a;
}
console.log(deck);
.as-console-wrapper { max-height: 100% !important; top: auto; }
以来deck
配列でなければなりません、あなたは間違いなく、その反復処理はならないObject.keys
配列値が全てのプリミティブなので、むしろ、あなたとインデックスを識別することができます-indexOf
とsplice
、またはにその配列インデックスにある項目を設定するnull
:それはあなたが欲しいものだ場合
function rmvHole() {
for (let i = 0, { length } = remove; i < length; i++) {
const index = deck.indexOf(remove[i]);
// deck.splice(index, 1);
// deck[index] = null;
}
}
(インデックスをに設定しnull
ても、実際には配列から要素が削除されるわけではありません。そのため、splice
代わりに必要なことを意味しているのではないかと思います)
const suits = ['s', 'h', 'd', 'c'];
const remove = ['10s', '11s', '13h', '9c'];
var deck = mkDeck();
shuffle(deck)
rmvHole();
// Functions
function rmvHole() {
for (let i = 0; i < remove.length; i++) {
const index = deck.indexOf(remove[i]);
deck[index] = null;
}
}
function mkDeck() {
let arr = [];
for (let s = 0; s < 4; s++) {
for (let i = 2; i < 15; i++) {
arr.push(i + suits[s]);
}
}
return arr;
}
function shuffle(a) {
for (let i = a.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[a[i], a[j]] = [a[j], a[i]];
}
return a;
}
console.log(deck);
.as-console-wrapper {
max-height: 100% !important;
top: auto;
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加