2011-06-06 187 views
1

我已經將2dim數組設置爲全局變量,這些全局變量由第0行的數字和第1行的字符串填充。 但是,當我將它作爲參數傳遞給函數時,其大部分值都會修改爲undefined,但在一個奇怪的值中保留!數組作爲參數問題傳遞

function formElements(howMany){ 
     elArr = []; 
     var w; var surface; 
     for(var j=0; j<howMany; j++){ 
      w = randomNumber(1,200); 
      surface = w*randomNumber(1,100); 
      elArr[0] =[j]; 
      elArr[1] =[j]; 
      elArr[0][j]=surface; 
      elArr[1][j]='_'+j; 
     } 
     aFunction(elArr,...other parameters....); //in this function I receive array with these undefined values I mentioned above!!! 
    } 
    function randomNumber(x,y) { 
     return Math.floor((Math.abs(y - x) + 1) * Math.random()) + Math.min(x, y); 
    } 

有人能告訴我什麼是錯? 10x和BR

+0

哪個數組是全局變量?這個函數('formElements')在哪裏調用?什麼是'j'? – 2011-06-06 15:42:37

+2

在發送給你的函數之前,你檢查過數組中的值嗎?您在代碼段中未定義的代碼段中引用變量時,可能會遇到問題。 – Herms 2011-06-06 15:43:37

+0

不,我剛剛編輯了代碼,因此它對於你來說更具可讀性並且忘記了一個循環我將稍後編輯它 – kidwon 2011-06-06 15:45:06

回答

4

j的引用使其看起來像是在一個循環內。在這種情況下,我不認爲這是做你想要什麼:

elArry[0] = [j]; 

這的elArray[0]值設置爲一個單一的元素,j數組。如果你在循環中這樣做,那麼你每次都用一個新元素覆蓋這些數組。

編輯:

現在,你已經發布了驗證完整的循環。你可能想要類似於:

function formElements(howMany){ 
    elArr = [[],[]]; 
    for(var j=0; j<howMany; j++){ 
     elArr[0][j]=surface; 
     elArr[1][j]='_'+j; 
    } 
    aFunction(elArr,...other parameters....); 
} 
+2

+1另外它可能更容易理解作爲包含諸如'{number:surface,string:'_'+ j}''的對象的1-dim數組。但是當然,比「數字」和「字符串」更有意義的名字。 – 2011-06-06 15:52:43

+0

10x真的有幫助!我試圖避免'新的Array()'的東西,但不知道替代的正確語法。 – kidwon 2011-06-06 16:03:09