我有一个函数试图将数组系统地添加到另一个多维数组。在正确计算要添加的数组的每个步骤中,但是,这些计算会更改先前输入的值。我试过使用slice但我显然做错了:(。
请参见下面的代码-受影响的返回值posMatrix
。
function allPossibilities(hand) {
var startingHandLength = hand.length;
var potHand = Array.prototype.slice.call(hand);
var scores = new Array();
var posMatrix = new Array();
var nextCard = 1;
var progressStage = true;
var finished = false;
var shallowArr = new Array();
do {
scores = calculateScores(potHand);
var maxScore = Math.max.apply(null, scores)
shallowArr = potHand.slice();
if (maxScore>16.5)
{posMatrix.push([shallowArr,maxScore])
console.log(posMatrix);
debugger;
if (potHand.length !== startingHandLength)
{
do{
if(potHand[potHand.length-1][1] < 10)
{
potHand[potHand.length-1][1]++;
progressStage = true;
}
else {potHand.pop();
potHand[potHand.length-1][1]++;}
}
while(progressStage === false)
}
}
else
{
potHand.push(["Imaginary",1,"Imaginary"]);
}
progressStage=false;
if(potHand.length === startingHandLength)
{finished = true;}
}
while(finished === false);
return posMatrix;
}
如果起始手> 16.5,则该函数将正常运行,因为其他任何代码都不会运行。但是否则就没有。最终的返回值应该是一个数组,其中每个元素的外观如下:[[array],number]。这个数字看起来很好,但是由于它不是对象,因此不会受到影响。我希望[array]彼此不同,目前它们都相同。
答案 0 :(得分:1)
答案 1 :(得分:0)
您制作了hand
的浅表副本(顺便说一句,您应该包括在内)。用这样的语句
potHand[potHand.length-1][1]++;
您也正在访问和修改hand
的元素。
在这里,potHand[potHand.length-1]
是一个对象,它是hand
的en元素(不是副本-相同元素)。