我已经使用JS编程了大约半年了,突然,我遇到了一个非常奇怪的行为。

我正在创建一个游戏,不要与HTML或CSS部分混淆-不要对其进行编辑。 JS需要它,但是那里没有错误。

因此,我有两个数组:queueToRemoveArr = []queueToAddArr = []

然后,在第53行上有一个if语句。如果为true,则执行以下两行:

console.log("remove live cells", rowArg, cellArg);
queueToRemoveArr.push($table.rows[rowArg].cells[cellArg]);


我正在使用console.log()只是为了检查将哪个元素推送到数组。

在第58行,还有另一个if,如果该内容为true,则执行该内容。我已将其注释掉,因此该问题更容易解决。

//queueToAddArr.push($table.rows[rowArg].cells[cellArg]);




让我们运行它,看看会得到什么:
javascript - 不使用push()函数,将JavaScript数组的数据复制到另一个数组-LMLPHP
这是第一代(换句话说,我第一次运行功能happyEventToCreateLiveCells

一切看起来都很好,如图所示。 1 + 1 = 2,这就是queueToRemoveArr数组中有多少个元素。 queueToAddArr数组为空,因为我对此不做任何事情。没有push(),什么都没有。

让我们再次运行它(第二次):
javascript - 不使用push()函数,将JavaScript数组的数据复制到另一个数组-LMLPHP

那这里发生了什么?请解释。数组queueToRemoveArr中包含一个元素,这是可以的,因为1 = 1(参见照片?)。但是queueToAddArr在地球上是如何得到一件物品的?它与queueToRemoveArr数组中指定的项目完全相同。

我可以告诉您,如果我们取消注释//queueToAddArr.push($table.rows[rowArg].cells[cellArg]);行会发生什么,但我将给您显示图片。完全相同的数组。但是,只有第二次运行。
javascript - 不使用push()函数,将JavaScript数组的数据复制到另一个数组-LMLPHP

第一次运行我尝试的所有东西时,它都能工作。第二次运行有什么问题?



由于最多30000个字符的限制,因此无法在此处添加堆栈代码段,但您已经很清楚地了解了我所描述的问题。

Codepen链接:https://codepen.io/Kestis500/pen/NYzJLQ?editors=0010

仅观看JS零件。

最佳答案

此行导致了您的问题:

 queueToRemoveArr = queueToAddArr = [];


它应该是:

queueToRemoveArr =[];
queueToAddArr = [];

关于javascript - 不使用push()函数,将JavaScript数组的数据复制到另一个数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49667262/

10-11 05:16
查看更多