我正在使用node.js服务器来进行多人同步骰子,但我有一些奇怪的问题,变量没有被引用或使用......
var origonalRolls = rolls;
//identify epic fails
var epicFails = [];
for(var r = 0; r < rolls.length; r++)
if(rolls[r] === 1)
epicFails.push(r);
console.log("TEST 1 :: " + JSON.stringify(rolls));
console.log("TEST 2 :: " + JSON.stringify(origonalRolls));
//remove epic fails and the corresponding heighest
if(epicFails.length > 0){
for(var i = epicFails.length-1; i >= 0; i--){
rolls.splice(epicFails[i], 1);
if(rolls[rolls.length-1] >= success)
rolls.splice(rolls.length-1, 1);
}
}
console.log("TEST 3 :: " + JSON.stringify(rolls));
console.log("TEST 4 :: " + JSON.stringify(origonalRolls));
上面应该找到rolls
数组中的任何元素,然后将其添加到epicFails
。然后它应该从rolls
以及最高的剩余卷筒中移除它。 (注意,rolls
按数字排序)
由于某种原因,这段代码的输出如下:
TEST 1 :: [1,1,2,3,3,6,7,7,9,9]
TEST 2 :: [1,1,2,3,3,6,7,7,9,9]
TEST 3 :: [2,3,3,6,7,7]
TEST 4 :: [2,3,3,6,7,7]
我不确定为什么rolls
和origonalRolls
开始相同而结尾相同。我只使用rolls
。
对这个问题的任何帮助和/或解释都是受欢迎的,这一直困扰着我很久......
答案 0 :(得分:2)
在Javascript中数组和对象只是浅层复制 - 这意味着从另一个数组(originalRolls)复制的数组(roll)只是对originalRolls的引用 - 它不是一个全新的数组,修改一个值会影响另一方面的价值观。
您需要实现深层复制功能,以创建一个基于另一个的全新阵列。在这里和网上的其他地方有很多深度复制数组/对象 - 来自快速谷歌的here is one of them。
答案 1 :(得分:0)
将var origonalRolls = rolls;
替换为:
var origonalRolls = [];
for (var i = 0, len = rolls.length; i < len; i++) {
origonalRolls[i] = rolls[i];
}