【发布时间】:2020-03-28 16:36:00
【问题描述】:
非常新手,我的夹具和联赛表程序可以很好地处理硬编码的夹具,但尝试使用更灵活的代码逐轮构建夹具却破坏了它。
您会看到我已经编写了这两种方法,并使用标志 'hardFix' 来确定固定装置的构建方式。
var players = ["P1", "P2", "P3"];
var Fixtures = [];
var rounds = 3;
var hardFix = false;
function buildFixtures() {
if (hardFix == true) {
Fixtures = [
[players[0], , , players[1]],
[players[0], , , players[2]],
[players[1], , , players[2]],
[players[1], , , players[0]],
[players[2], , , players[0]],
[players[2], , , players[1]],
[players[0], , , players[1]],
[players[0], , , players[2]],
[players[1], , , players[2]],
[players[1], , , players[0]],
[players[2], , , players[0]],
[players[2], , , players[1]],
];
} else {
let oddRound = [
[players[0],,,players[1]],
[players[0],,,players[2]],
[players[1],,,players[2]]
];
let evenRound = [
[players[1],,,players[0]],
[players[2],,,players[0]],
[players[2],,,players[1]]
];
for (let i = 1; i <= rounds; i++) {
if (i & 1) {
Array.prototype.push.apply(Fixtures, oddRound);
} else {
Array.prototype.push.apply(Fixtures, evenRound);
}
}
}
}
您将在下面看到:
- 两轮没问题
- 当有更多时,第一轮变得“不可见”
- 最终夹具的结果被复制(请参阅下表中的整个数组)
我相信这与我构建的数组的结构有关。任何建议表示赞赏。在此先感谢
【问题讨论】:
-
这不正是您 6 天前提出的问题吗?到底什么是“夹具”?
-
在不知道最终目标是什么的普通语言或伪代码的情况下,不可能修复逻辑错误。支持 Pointy 关于什么是夹具的评论?另外,如果您可以提供有关“游戏规则”的一些上下文。
-
@Pointy 这是该问题的另一个方面。我的问题集中在数组结构而不是代码本身。我将在上面澄清“夹具”的含义。
-
请准确告诉我们这段代码应该做什么,它正在做什么,以及你做了什么来尝试找出它为什么不起作用。我不明白为什么您的数组中间有空条目,尤其是当您修改它们的唯一方法是推到末尾时。
-
当您从
oddRound和evenRound动态构建表时,请了解将它们推入目标数组不会复制。如果您稍后操作目标中的子数组,您将为多个目标行更改相同的数组。您可以.push(oddRound.slice())推送这些源数组的副本。
标签: javascript arrays push