[英]How to compare elements in an array (javascript)
抱歉,這聽起來很基礎,但是我是編碼方面的新手(不過,我正在盡力而為!)
我正在使用javascript制作一個簡單的較高或較低紙牌游戲,用戶在其中猜測下一張紙牌是否高於或低於顯示的當前紙牌。
我目前有52張卡片的陣列,並且我正在使用Math.random從陣列中隨機生成一張卡片。
我想要的是比較兩張卡的價值,但是我不確定該怎么做。 我覺得它可能涉及IndexOf,但我不確定。
謝謝你一百萬,如果這不是主題或重復的話,我感到抱歉!
這是我的陣列,如果有幫助。
function randomCard()
{
var cardArray = ["Club0.jpg","Club1.jpg","Club3.jpg","Club3.jpg","Club4.jpg","Club5.jpg","Club6.jpg","Club7.jpg","Club8.jpg","Club9.jpg","Club10.jpg","Club11.jpg","Club12.jpg","Diamond0.jpg","Diamond1.jpg","Diamond2.jpg","Diamond3.jpg","Diamond4.jpg","Diamond5.jpg","Diamond6.jpg","Diamond7.jpg","Diamond8.jpg","Diamond9.jpg","Diamond10.jpg","Diamond11.jpg","Diamond12.jpg","Heart0.jpg","Heart1.jpg","Heart2.jpg","Heart3.jpg","Heart4.jpg","Heart5.jpg","Heart6.jpg","Heart7.jpg","Heart8.jpg","Heart9.jpg","Heart10.jpg","Heart11.jpg","Heart12.jpg","Spade0.jpg","Spade1.jpg","Spade2.jpg","Spade3.jpg","Spade4.jpg","Spade5.jpg","Spade6.jpg","Spade7.jpg","Spade8.jpg","Spade9.jpg","Spade10.jpg","Spade11.jpg","Spade12.jpg"];
var pickCard = cardArray[Math.floor(Math.random() * cardArray.length)];
document.getElementById("card").src = pickCard;
}
我認為這里的問題不是您不了解數組和循環,而是在開始之前如何正確地構造問題。 目前,您有以下內容:
var cardArray = ["Club0.jpg","Club1.jpg","Club3.jpg"...];
而且,這使您的生活變得更加艱難,因為對這些數組元素執行數值比較(雖然並非不可能)會涉及到正則表達式測試,您可能還沒有准備好。
相反,如果您說“我有4套紙牌,並且紙牌的值是1-13(11是Jack,13是King,A是低位),那么您可以開始更好地理解問題范圍。
讓我們從創建牌組開始-四個套裝,每個套裝14張卡片。
var deck = {
heart: [1,2,3,4,5,6,7,8,9,10,11,12,13],
club: [1,2,3,4,5,6,7,8,9,10,11,12,13],
spade: [1,2,3,4,5,6,7,8,9,10,11,12,13],
diamond: [1,2,3,4,5,6,7,8,9,10,11,12,13]
};
我們需要將衣服的名稱保存在單獨的數組中,以便可以訪問對象。
var suits = ['heart','club','spade','diamond'];
接下來, memo
很重要。 由於我們不想在每次抽獎中都拿一張相同的牌,因此需要記下已經拿過的牌。 memo
是我們選擇的卡片的存儲。
var memo = [];
現在使用函數drawRandomCard
。 它需要從我們的西服陣列中隨機抽取一個西服,並從所選西服的陣列中獲取一個數字。 如果卡片在memo
我們將再次抽簽,否則我們將其添加到memo
並退回卡片。 但是,由於我們仍然想對這些值進行比較,因此我們將返回一個數組,第一個元素是suit,第二個元素是值。
function drawRandomCard() {
var suit = suits[Math.floor(Math.random() * suits.length)];
var number = deck[suit][Math.floor(Math.random() * 13)];
if (memo[suit + number]) drawRandomCard();
memo.push(suit + number)
return [suit, number];
}
例如:
var card1 = drawRandomCard();
var card2 = drawRandomCard();
要測試這些值,請相互比較數組的第二個值:
console.log(card1[1] > card2[1]); // true or false
然后,如果需要,可以使用join
將卡數組元素合並在一起,從而將這些變量的值與需要加載的任何圖像進行匹配。
var img = new Image();
img.src = card1.join('') + '.jpg'; // eg. diamond4.jpg
要么:
document.getElementById("card").src = card1.join('') + '.jpg';
我會用類似的東西:
function Card(suit, number) {
this.suit = suit;
this.number = number;
}
Card.prototype.image = function() {
return this.suit + this.number + '.jpg';
};
Card.compare = function(a, b) {
/* Define how you want to compare cards. My guess is: */
return a.number < b.number;
};
Card.prototype.compareTo = function(other) {
return Card.compare(this, other);
};
var suits = ['Club', 'Diamond', 'Heart', 'Spade'],
cardArray = [];
for (var i = 0; i < suits.length; ++i) {
for (var j = 0; j <= 12; ++j) cardArray.push(new Card(suits[i], j));
}
var currentCard = cardArray[0]; /* Or whatever initial card */
function randomCard() {
var pickCard = cardArray[Math.random() * cardArray.length | 0];
if(currentCard.compareTo(pickCard)) {
/* Do something */
} else {
/* Do something else */
}
document.getElementById("card").src = pickCard.image();
currentCard = pickCard;
}
如果您希望一旦選擇了卡片,就無法再次選擇(例如@MackieeE所說),請更換
var pickCard = cardArray[Math.random() * cardArray.length | 0];
同
var pickCard = cardArray.splice(Math.random() * cardArray.length | 0, 1)[0];
為了從cardArray
刪除挑選的卡。
如果card="Club10.jpg"
這將從卡的圖像字符串中獲取值:
card.match(/\d+/g)
將返回:
10
例如:
var cardArray = ["Club0.jpg","Club1.jpg","Club3.jpg","Club3.jpg","Club4.jpg","Club5.jpg","Club6.jpg","Club7.jpg","Club8.jpg","Club9.jpg","Club10.jpg","Club11.jpg","Club12.jpg","Diamond0.jpg","Diamond1.jpg","Diamond2.jpg","Diamond3.jpg","Diamond4.jpg","Diamond5.jpg","Diamond6.jpg","Diamond7.jpg","Diamond8.jpg","Diamond9.jpg","Diamond10.jpg","Diamond11.jpg","Diamond12.jpg","Heart0.jpg","Heart1.jpg","Heart2.jpg","Heart3.jpg","Heart4.jpg","Heart5.jpg","Heart6.jpg","Heart7.jpg","Heart8.jpg","Heart9.jpg","Heart10.jpg","Heart11.jpg","Heart12.jpg","Spade0.jpg","Spade1.jpg","Spade2.jpg","Spade3.jpg","Spade4.jpg","Spade5.jpg","Spade6.jpg","Spade7.jpg","Spade8.jpg","Spade9.jpg","Spade10.jpg","Spade11.jpg","Spade12.jpg"];
var pickCard1 = cardArray[Math.floor(Math.random() * cardArray.length)];
var pickCard2 = cardArray[Math.floor(Math.random() * cardArray.length)];
if(parseInt(pickCard1.match(/\d+/g)) === parseInt(pickCard2.match(/\d+/g))){
/*Do something here if the first equals the second card*/
} else if(parseInt(pickCard1.match(/\d+/g)) > parseInt(pickCard2.match(/\d+/g))){
/*Do something here if the first card is greater than the second card*/
}else{
/*Do something here if the first card is less than the second card*/
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.