Javascript 更新函数返回的数组

Javascript 更新函数返回的数组,javascript,arrays,function,Javascript,Arrays,Function,我一直在尝试使用Javascript实现一些纸牌游戏。在下面的代码片段中,我只想从牌组顶部抽出两张牌,并将其交给玩家(下面是简化的逻辑) 函数组(){ var faceCards=[['jack',11],'queen',12],'king',13]; 返回人脸卡; } 函数removeCard(){ var singleCard=deck().pop(); var faceValue=单卡[0]; 返回faceValue; } var cardPair=[removeCard(),remove

我一直在尝试使用Javascript实现一些纸牌游戏。在下面的代码片段中,我只想从牌组顶部抽出两张牌,并将其交给玩家(下面是简化的逻辑)
函数组(){
var faceCards=[['jack',11],'queen',12],'king',13];
返回人脸卡;
}
函数removeCard(){
var singleCard=deck().pop();
var faceValue=单卡[0];
返回faceValue;
}
var cardPair=[removeCard(),removeCard()];
控制台日志(卡片对)您的错误如下:

var singleCard = deck().pop()
每次调用
deck()
时,都会创建一个新的卡片数组,并且不会重复返回相同的数组

如果您还不想完全OO,请考虑至少将桥面作为一个参数传递给<代码> ReaveCeCub()/<代码>函数,即

function removeCard(deck) {
    var singleCard = deck.pop();
    var faceValue = singleCard[0];
    return faceValue;
}

var deck = newDeck();
var pair = [ removeCard(deck), removeCard(deck) ];
但最终,您应该更长期地寻求一个完整的OO解决方案,您的使用可能会变成:

var deck = new Deck();
var pair = [ deck.takeCard(), deck.takeCard() ];
此问题的实施超出了此特定问题的范围。

您的错误如下:

var singleCard = deck().pop()
每次调用
deck()
时,都会创建一个新的卡片数组,并且不会重复返回相同的数组

如果您还不想完全OO,请考虑至少将桥面作为一个参数传递给<代码> ReaveCeCub()/<代码>函数,即

function removeCard(deck) {
    var singleCard = deck.pop();
    var faceValue = singleCard[0];
    return faceValue;
}

var deck = newDeck();
var pair = [ removeCard(deck), removeCard(deck) ];
但最终,您应该更长期地寻求一个完整的OO解决方案,您的使用可能会变成:

var deck = new Deck();
var pair = [ deck.takeCard(), deck.takeCard() ];

这个问题的实现超出了这个特定问题的范围。

您每次运行
deck()
时都在创建一个新数组。尝试将组保存在数组中,并在此上运行
pop

函数组(){
var faceCards=[['jack',11],'queen',12],'king',13];
返回人脸卡;
}
功能移除卡(fromDeck){
var singleCard=fromDeck.pop();
var faceValue=单卡[0];
返回faceValue;
}
var thisDeck=deck();
var cardPair=[removeCard(thisDeck),removeCard(thisDeck)];

控制台日志(卡片对)每次运行
deck()
时都会创建一个新数组。尝试将组保存在数组中,并在此上运行
pop

函数组(){
var faceCards=[['jack',11],'queen',12],'king',13];
返回人脸卡;
}
功能移除卡(fromDeck){
var singleCard=fromDeck.pop();
var faceValue=单卡[0];
返回faceValue;
}
var thisDeck=deck();
var cardPair=[removeCard(thisDeck),removeCard(thisDeck)];


控制台日志(卡片对)@BijayTimilsina嗯,你真的应该吃饱了OO@Alnitak这是什么意思?它是如何适用的呢?“嗯,你真的应该使用完整的OO”@BijayTimilsina,因为你应该只调用
deck()
(创建一次新的deck),然后每次你想删除一个card@AluanHaddad是的,我知道,你知道。在JavaScript中有很多很多实现OO的方法,我实际上非常喜欢使用词汇作用域,成员函数在这些变量上闭合。然而,我通常还是在一个真正的构造函数的上下文中这样做。@BijayTimilsina好吧,你真的应该满了OO@Alnitak这是什么意思?它是如何适用的呢?“嗯,你真的应该使用完整的OO”@BijayTimilsina,因为你应该只调用
deck()
(创建一次新的deck),然后每次你想删除一个card@AluanHaddad是的,我知道,你知道。在JavaScript中有很多很多实现OO的方法,我实际上非常喜欢使用词汇作用域,成员函数在这些变量上闭合。但是我通常还是在一个真正的构造函数的上下文中这样做。所以我想在这里我只是编辑一个存储在变量thisDeck中的主数据组的副本,对吗?因此,当我更改内容时,更改只发生在thisDeck中,而不是在FaceCard中,对吗?这是一个糟糕的实现-
removeCard()
函数不应该依赖任何外部范围的变量。如果你想使用两个甲板,会发生什么@BijayTimilsina这是正确的,是的,您正在操作
这个牌组
,并且使用
牌组
函数只给您一次原始牌组,您不需要重新调用它,直到您想要“洗牌”或再次构建新牌组。所以“live”组就在那个var中,是的。@Alnitak很好,但是没有提到2个组,我只是想强调OP每次都在编辑一个新数组,而不是在同一个变量中进行编辑:)@Stu right,但正确的实现是通过组,不修改函数作用域之外的变量,所以我想在这里我只是编辑存储在变量thisDeck中的主组的副本,对吗?因此,当我更改内容时,更改只发生在thisDeck中,而不是在FaceCard中,对吗?这是一个糟糕的实现-
removeCard()
函数不应该依赖任何外部范围的变量。如果你想使用两个甲板,会发生什么@BijayTimilsina这是正确的,是的,您正在操作
这个牌组
,并且使用
牌组
函数只给您一次原始牌组,您不需要重新调用它,直到您想要“洗牌”或再次构建新牌组。“live”deck就在这个var中,是的。@Alnitak很好,但是没有提到2个deck,我只是想强调OP每次都在编辑一个新数组,而不是在同一个变量中进行编辑:)@Stu right,但是正确的实现应该是传递deck,而不是修改函数范围之外的变量