2013-03-25 19 views
0

我需要將具有匹配訂單號的表中的行分組,然後迭代分組。如何遍歷JavaScript中的鍵控數組?

我有此代碼的工作,其創建完美陣列,數據明智:

var multItems = []; 
    //combine items under orders, 
    $('tr.order').each(function(){ 
     var orderNum = $(this).find('.ordernumber').val(); 
     if (($('tr.order .ordernumber[value="'+orderNum+'"]').length > 1) && !(orderNum in multItems)){ 
      $('tr.order .ordernumber[value="'+orderNum+'"]').each(function(){ 
       if (!(orderNum in multItems)){ 
        multItems[orderNum] = []; 
       } 
       multItems[orderNum].push(this); 
      }); 
     } 
    }); 
    //create new tr with order totals (of each item) 
    for (var i = multItems.length - 1; i >= 0; i--) { 
     //code 
    }; 

但它創建具有長度爲0的數組,顯然,其中multItems[] =但multItems[orderNumber]定義..如果我不知道訂單號,就無法訪​​問它。我可以分別製作一系列訂單號碼,但感覺這一定是漫長的。如果我只是創建一個編號數組,我怎麼知道哪個編號從訂單中彈出項目?

+0

眼下'orderNum'是一個字符串,使用'parseInt',甚至'推()'如果可能的話,將解決一些問題,如果它是在實際上你正在嘗試創建一個數字索引數組。 – adeneo 2013-03-25 21:48:10

+0

無論如何,@ adeno-orderNum將被強制爲字符串,即使它是一個數字,所以這不是問題。 – RobG 2013-03-25 22:59:41

+0

@ Damon-在你有問題的地方「但是'multItems [orderNumber]'被定義了」,但是在你有'multItems [orderNum]'的代碼中,是這樣嗎? – RobG 2013-03-25 23:04:56

回答

2

根據您目前的代碼,你有

var orderNum = $(this).find('.ordernumber').val(); 

其中val()返回一個字符串,而不是一個數字。所以當你在做multItems[orderNum]這是一個字符串。

要使用當前代碼,您需要使用for in循環。

for (var prop in multItems) { 
    if(multItems.hasOwnProperty(prop)) { 
     console.log(multItems[prop]); 
    } 
} 

僅供參考:訂單不能保證。你也應該在這裏使用一個對象{}而不是一個數組。


現在你可以做的另一件事是使用parseInt函數的字符串變成一個數,比你神奇的循環將開始工作。 [這是假設ORDERNUMBER是一個數值]

var orderNum = parseInt($(this).find('.ordernumber').val(), 10); 
+0

數組索引只是對象屬性(即字符串),所以如果'orderNum'是一個數字,它將被強制爲字符串。 – RobG 2013-03-25 22:54:10