.for每个仅移动数组元素的一半

时间:2018-07-14 02:41:05

标签: javascript oop foreach

首先,我是JavaScript的新手,为了更好地理解OOP,我决定构建单人纸牌游戏(请记住,三张牌)。在单人纸牌游戏中(我确信这是众所周知的),您以任何模式分发纸牌,其余纸牌放在一边。我称这些为“备用”套牌。然后,您按照游戏规则移动所处理的卡(只能将红色6放在黑色7上,依此类推),当用尽所有选项时,您可以将三张卡从“保留”的顶部拉出并看到如果您可以使用第三张卡继续播放。如果没有,则再拉三张牌,依此类推,直到“储备”卡牌中的卡用完为止。此时,您可以将所有从“备用”卡座顶部拔出的卡放回“备用”卡座,然后以相同的方式重复使用。

这是我的JavaScript损坏的地方。因此,我创建了一个具有属性playSlotswinSlotsreservepick的Table对象。 playSlots是发牌的数组阵列,reserve是“预留”卡片组中存在的牌数组,winSlots与该问题无关,{ {1}}是一个数组,在整个游戏过程中都需要填充pick中的卡片。很不言自明。 reserve为空,并且您想将reserve卡放回去时,目前我的代码是:

pick

这个问题是,它只会遍历if(!Array.isArray(newGame.reserve) || !newGame.reserve.length){ newGame.pick.forEach(function(cur, i, arr){ newGame.reserve.push(arr.shift()); }); } 数组中卡片的一半。我在调试器中进行了检查,实际上是一次将卡片重新添加到备用卡中,但是一旦到达第13张卡片,它就会退出循环(以单人纸牌方式分发28张卡片,将24个保留在备用甲板中...)。

我非常确定此问题与pick条件有关。这种情况是我在这里找到的:

Check if array is empty / does not exist. JS

尽管回答者对他的解释很清楚,但是我对它的含义还是有点模糊。事实是,我也尝试过以下条件:

!newGame.reserve.length

,结果完全相同。 if(newGame.reserve[0] === undefined) 循环仅迭代了一半的数组元素。...我在这里错过了什么?

1 个答案:

答案 0 :(得分:0)

您可以使用Array splice

轻松实现这一点

注意:这会将选择反向转换为保留的末尾,而您的代码则不会

如果您不需要颠倒它,只需删除.reverse()

尚不清楚您是否要选择拨回储备金

var newGame = {
    pick: [1,2,3,4],
    reserve: [10,11,12]
};

newGame.reserve.push(...newGame.pick.splice(0, newGame.pick.length).reverse());
console.log(newGame);

在“旧学校” javascript中,可以使用.push.apply

编写

var newGame = {
    pick: [1,2,3,4],
    reserve: [10,11,12]
};
newGame.reserve.push.apply(newGame.reserve, newGame.pick.splice(0, newGame.pick.length).reverse());
console.log(newGame);