簡體   English   中英

如何比較數組中的元素(javascript)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM