2009-12-28 147 views
1

我想在JavaScript中使用2維數組來存儲字符串。但是我無法正確獲取這些值。以下是我的代碼。Javascript 2D數組

 var commentstore=new Array(); 
     function creating(id,day) 
     { 
      if(commentstore[day,id] != null) 
     { 
      alert("It already exists: commentstore["+day+"]["+id+"]"+commentstore[day,id]); 
      var textinput="<div id='closeit'>Comments:<input type='text' name='comm["+day+"] ["+id+"]' value='"+commentstore[day,id]+"'/></div> 
           <div id='closing' onclick='closecomment("+id+","+day+")'>:)</div>"; 
     } 
      else 
      { 
       var textinput="<div id='closeit'>Comments:<input type='text' name='comm["+day+"] ["+id+"]' /></div> 
           <div id='closing' onclick='closecomment("+id+","+day+")'>:)</div>"; 
       $('#comm').html(textinput); 
      } 

    function closecomment(id,day) 
    { 
     comm.style.visibility='hidden'; 
     var str='comm['+day+']['+id+']'; 
     var element = document.getElementById(str); 
    if(element.value !=null) 
    { 
     commentstore[day,id]=element.value; 
     alert('New values stored: commentstore['+day+']['+id+']'+commentstore[day,id]); 
    } 
    } 

所以在上面的代碼,如果commentstore [0,0] = '男人' 然後commentstore [1,0]和[2,0]和[3,0] ... [7,0 ]也充滿了'男人'。評論商店[0,1]甚至評論商店[4,1]的情況也是如此。任何人都可以提供任何教程或示例代碼,我們可以動態創建javascript 2d數組。提前致謝。

+0

'[day,id]'相當於只是在做'[id]' – 2009-12-28 15:45:15

+0

謝謝大家的幫助。它現在工作正常。我需要更多地驗證它。再次感謝.. – 2009-12-28 15:58:15

回答

1

使用commentstore [0] [0]代替commentstore [0,0]。此外,使用嚴格comparaison每當不需要寬鬆comparaison:

var commentstore = []; 

function creating(id,day) 
{ 
    if(commentstore[day] === undefined) commentstore[day] = []; 
    if(commentstore[day][id] !== undefined) 
    { 
     alert("It already exists: commentstore["+day+"]["+id+"]"+commentstore[day][id]); 
     var textinput="<div id='closeit'>Comments:<input type='text' name='comm["+day+"] ["+id+"]' value='"+commentstore[day][id]+"'/></div> 
         <div id='closing' onclick='closecomment("+id+","+day+")'>:)</div>"; 
    } 
    else 
    { 
     var textinput="<div id='closeit'>Comments:<input type='text' name='comm["+day+"] ["+id+"]' /></div> 
         <div id='closing' onclick='closecomment("+id+","+day+")'>:)</div>"; 
     $('#comm').html(textinput); 
    } 

function closecomment(id,day) 
{ 
    comm.style.visibility='hidden'; 
    var element = document.getElementById(str); 
    if(element.value !== '') 
    { 
     commentstore[day][id]=element.value; 
     alert('New values stored: commentstore['+day+']['+id+']'+commentstore[day][id]); 
    } 
} 

編輯:原代碼,STR是不確定的,執行失敗。您可以用closecomment修復:

var element = $('#closeit > input').eq(0); 
+0

謝謝。這是作爲if(element.value)行所需的對象給出的錯誤。並且警報不會進入closecomment函數 – 2009-12-28 15:38:10

+0

確實,_str_未定義。你必須找到相關的輸入。通過走DOM或通過識別輸入。 – Alsciende 2009-12-29 08:37:06

6

commentstore[day,id]替換爲commentstore[day][id]。這是多維數組的語法。

+0

如果(commentstore [day,id]!= null)這行不在我的行中。所以我用','。這是因爲IE。 – 2009-12-28 15:41:05

+1

請描述什麼不起作用,以及是否收到任何錯誤消息。 – 2009-12-28 15:44:25

-1

的JavaScript只支持陣列與一個單一的指數,但該指數可以是任何東西,所以如果你真的想二維數組,這樣做:

commentstore[day+','+id] = ... 

即使用一個帶有組件的字符串作爲鍵。

+3

你爲什麼不*使用適當的多維數組? 'a = []; a [0] = []; a [0] [1] = ...' – 2009-12-28 15:46:31

+0

例如,由於初始化問題:您必須爲每個索引創建一個數組。通過我的解決方案,您可以隨時隨地分配。此外,我的解決方案允許任意鍵(不僅是整數)和稀疏數組。總而言之,它速度較慢,但​​通常更易於使用,理解和調試。 – 2009-12-28 20:53:56

+2

如果您需要解析第一維中給定索引處的每條記錄,則效率不高。 – Alsciende 2009-12-29 08:39:22