2013-09-27 45 views
0

請參閱此:jquery的多型鐵血陣列的行爲出現異常

http://jsfiddle.net/MasterOfKitties/v7xbu/7/

/*This is the desired behavior*/ 
/*var A = [1, 2, 3]*/ 
/*var B = "hello", [1, 2, 3], 
     "hello", [2, 3, 2], 
     "hello", [1, 5, 1]]*/ 

var A = new Array(); 
var B = new Array(); 

function fnMakeArray() 
    { 
    var strTemp; 
    var arrTemp = new Array(); 
    strTemp = parseInt(window.prompt("Enter a number until you hit cancel","")); 


    while (strTemp>0) 
     { 
     arrTemp.push(strTemp); 
     strTemp = parseInt(window.prompt("Enter a number until you hit cancel","")); 
     } 
     A[0] = "hello"; 
     A[1] = arrTemp; 
     alert(A); 
    } 


function fnReplicateArray() 
    { 
     B.push(A); 
     fnDisBArray(); 
     alert(B); 

    } 

function fnDisBArray() 
{ 
    var strTemp; 
for(var x = 0; x<B.length;x++) 
    { 
     strTemp += "<P>" + B[x] + "</p>" 

    } 
    document.getElementById('parse').innerHTML = strTemp ; 


} 

出於某種原因,試圖顯示B排列時,它提出了未定義。此外,它似乎沒有正確地增加鋸齒狀陣列,因爲即使佈置了b [1]或b [2]元素,b [0]元素也開始發生根本性變化。

有沒有什麼幫助?這是怎麼回事?

回答

2

你有一個值來初始化strTemp

var strTemp = ""; 

,而不是

var strTemp; 

你的情況。

strTemp += "<P>" + B[x] + "</p>" 

被首次strTemp執行線是undefined 所以其轉換成字符串作爲undefined和在開始時

看到working fiddle

1

你的函數不「複製」 /複製A陣列,它只是一個推參考一到B.我相信你想:

B = A.slice(0); 

現在,你似乎有另外一個問題:如果你輸入例如10和11進入提示,你得到這個陣列的最後:

[ 
    "hello", 
    [ 
     10, 
     11 
    ] 
] 

我懷疑這不是你真正想要的。你能解釋一下你真正想要完成的事情嗎?

+0

被所附這是步驟在正確的方向。但是,爲什麼我會在代碼的顯示屏前看到undefined? –

+1

因爲你必須像mithunsatheesh所說的那樣初始化strTmp爲「」。否則,當試圖用另一個字符串連接undefined時,會得到字符串「undefined」。 – bfavaretto

+0

我實際上試圖存儲信息來動態創建一個菜單,如:ITEM(名稱,類型,價格,[成分1,成分2等]),然後將其全部存儲到另一個名爲MENU的數組中。因此MENU [0]將顯示特定ITEM的所有信息,MENU [1]將顯示另一種類型的所有信息。這基本上只是一個複雜的參差不齊的陣列,但當簡單的參差不齊的陣列投擲我時,它很奇怪。 –