我對我的javascript代碼中發生了什麼感到非常困惑。我正在嘗試編寫一個函數來創建一個隨機點數組。但是,當我將數組記錄到循環中(其功能是將數據添加到數組中),然後在循環外再次記錄它時,我得到兩個不同的數組。javascript - 數組在logging中顯示兩個不同的數組
第一個,如隨機X,Y點的列表所預測的那樣,但第二個日誌只包含最後輸入的X,Y點。
function Pick()
{
var numPoints = 4 * Math.floor(4+Math.random()*5);
var chosen_pts = [];
var lastPt;
for(var i = 0;i<numPoints;i++)
{
if(chosen_pts.length==0)
{
var temp = new Point(Math.floor(Math.random()*250),Math.floor(Math.random()*250));
var newPt = pickClose(temp);
chosen_pts.push(newPt);
lastPt = newPt;
}
else{
var newPt = pickClose(lastPt);
chosen_pts.push(newPt);
}
console.log(chosen_pts[i]); //LINE 106
}
console.log("\noutside of the loop:")
for(var i = 0;i<numPoints;i++)
{
console.log(chosen_pts[i]); //LINE 111
}
}
控制檯中看到的照片 Console Array 1 Console Array 2
編輯:
function pickClose(lastPt)
{
var x = lastPt["X"];
var y = lastPt["Y"];
var dx = 0;
var dy = 0;
var rand = Math.floor(1+Math.random()*100);
if(rand<50){
dx = 1+Math.floor(Math.random()*10);
dy = 1+Math.floor(Math.random()*10);
if((dx+dy)%3==0){
dx*=-1;
}
}
else if(rand<80)
{
dx = 1+Math.floor(Math.random()*25);
dy = 1+Math.floor(Math.random()*25);
if((dx+dy)%3==0){
dy*=-1;
}
}
else{
dx = 1+Math.floor(Math.random()*60);
dy = 1+Math.floor(Math.random()*60);
if((dx+dy)%4==0){
dx*=-1;
dy*=-1;
}
}
if((x+dx) < 500&& (x+dx) >=0)
lastPt["X"]+=dx;
else
lastPt["X"]-=dx;
if((y+dy) < 500&& (y+dy) >=0)
lastPt["Y"]+=dy;
else
lastPt["Y"]-=dy;
return lastPt;
}
看起來很凌亂,但本質上我想要一個不同的值範圍隨機從(DX,DY選擇)基於初始隨機數。
的'pickClose'功能似乎是罪魁禍首。請包括它的源代碼。 –
我不認爲這是問題,考慮到第一次'console.log'被稱爲它打印出不同的數字爲每個點 –