2009-12-28 121 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