如何比较数组中的元素(javascript)

How to compare elements in an array (javascript)

本文关键字:元素 javascript 数组 比较 何比较      更新时间:2023-09-26

抱歉,如果这听起来很基本,但在编码方面我是一个完全的新手(不过我正在尽力变得更好!

我正在使用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 是杰克到 13 是国王,王牌低),那么你可以开始更好地理解问题范围。

让我们从创建套牌开始 - 四套花色,每套 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并返回卡。但是,由于我们仍然想对值进行比较,因此我们将返回一个数组,第一个元素是西装,第二个元素是值。

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*/
}