Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何比较数组中的元素(javascript)_Javascript_Arrays_Compare - Fatal编程技术网

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

如何比较数组中的元素(javascript),javascript,arrays,compare,Javascript,Arrays,Compare,如果这听起来很基本,我很抱歉,但我在编码方面完全是个新手(不过我正在尽我最大的努力让自己变得更好!) 我正在用javascript制作一个简单的高牌或低牌游戏,在这个游戏中,用户猜测下一张牌是高于还是低于当前显示的牌 我目前有一个52张卡片的数组&我正在使用Math.random从数组中随机生成一张卡片 我想要的是比较两张牌的价值,但我不知道该怎么做。我有一种感觉,它可能涉及IndexOf,但我不确定 非常感谢&如果这是离题或重复,我很抱歉 这是我的数组,如果有帮助的话 function ran

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

我正在用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;
}

我会使用类似于:

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;
}


要从
卡阵列中删除拾取的卡,我将使用以下方法:

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;
}


要从
卡阵列中删除拾取的卡,这将从卡的图像字符串中获取值,如果
card=“Club10.jpg”

将返回:

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*/
}
var card1 = drawRandomCard();
var card2 = drawRandomCard();

如果
card=“Club10.jpg”
,这将从卡的图像字符串中获取值:

将返回:

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*/
}
var card1 = drawRandomCard();
var card2 = drawRandomCard();

我认为这里的问题不是你不了解数组和循环,而是在开始之前如何正确地构建你的问题。目前你有以下几点:

var cardArray = ["Club0.jpg","Club1.jpg","Club3.jpg"...];
这会让你的生活变得更加困难,因为对这些数组元素进行数值比较——虽然不是不可能——会涉及到你可能还没有完全准备好的正则表达式测试

如果你说“我有4套牌,这些牌的值是1-13(11是一张顶升到13的王牌,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,第二个元素是value

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


我认为这里的问题不是你对数组和循环不了解,而是在开始之前如何正确地组织你的问题。目前你有以下几点:

var cardArray = ["Club0.jpg","Club1.jpg","Club3.jpg"...];
这会让你的生活变得更加困难,因为对这些数组元素进行数值比较——虽然不是不可能——会涉及到你可能还没有完全准备好的正则表达式测试

如果你说“我有4套牌,这些牌的值是1-13(11是一张顶升到13的王牌,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
很重要。因为我们不想在每次抽签时都拿一张相同的牌,所以我们需要记下已经拿了哪些牌<代码>备忘录
是我们参考的选定卡片的存储

var memo = [];
现在进入函数
drawRandomCard
。它从我们的套装数组中随机抽取一套套装,从所选套装数组中抽取一个数字。如果卡片在
memo
中,我们将再次提取,否则我们将其添加到
memo
并返回卡片。但是,因为我们仍然希望对值进行比较,所以我们将返回一个数组,第一个元素是suit,第二个元素是value

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


你试过什么吗?你能展示一下你目前的代码吗?我完全被卡住了,不知道该怎么做。对不起,我通常先自己尝试,但我很困惑。很抱歉你试过什么了吗?你能展示一下你到目前为止的代码吗?我完全被卡住了&不知道该怎么做。对不起,我通常先自己尝试,但我很困惑。很抱歉OP询问的是一张牌比另一张牌高还是低。OP的规范中没有这张牌,但我会在这里提到这一点,因为这可能是最好的答案。只需要包括这一点,一旦一张牌被选中,它就不能再被选中了。听起来OP也只是在学习JS。当你可以实现更简单的东西时,引入原型听起来不是一个好主意。@Andy,但我认为如果这是一个合法和正确的答案,无论多么复杂,也不值得投反对票。并不是只有一个正确答案。@Andy我写答案是因为我想帮忙。我想尽我所能帮助你。所以,我不会仅仅因为提问者可能不理解而发布更糟糕的答案,因为有了更好的答案,我可以帮助更多来这里寻找答案的人,即使有些人不理解。也许我也能帮助他们