2009-12-28 9 views
1

자바 스크립트에서 2 차원 배열을 사용하여 문자열을 저장하려고합니다. 그러나 나는 값을 정확하게 얻을 수 없다. 아래는 제 코드입니다.자바 스크립트 2 차원 배열

 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 ]도 '사람'으로 가득 차 있습니다. commentstore [0,1]도 주석 저장 [4,1] 시나리오와 동일한 문제가 발생합니다. 아무도 자바 스크립트 2d 배열을 동적으로 생성 할 수있는 자습서 나 샘플 코드를 제공 할 수 있습니까? 미리 감사드립니다.

+0

'[day, id]'는 단지 [id]'를 수행하는 것과 같습니다. –

+0

도와 주셔서 감사합니다. 이제는 잘 작동합니다. 나는 그것을 더 확인할 필요가있다. 다시 감사드립니다 .. –

답변

1

commentstore [0,0] 대신에 commentstore [0] [0]을 사용하십시오.

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]); 
    } 
} 

편집 : 느슨한 comparaison이 필요하지 않을 때마다 또한, 엄격한 comparaison를 사용하여 원래의 코드에서 STR은 정의하고 실행은 실패합니다. 당신과 closecomment에서 문제를 해결할 수 있습니다

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

감사합니다. 이것은 if (element.value) 라인에서 필요한 객체로서 에러를 내고 있습니다. closecomment 함수에서 경고가 나타나지 않습니다. –

+0

실제로 _str_는 정의되지 않았습니다. 관련 입력을 찾아야합니다. DOM을 걷거나 입력을 식별하여. – Alsciende

6

commentstore[day,id]commentstore[day][id]으로 바꿉니다. 이것이 다차원 배열 구문입니다.

+0

if (commentstore [day, id]! = null)이 줄에서 나를 위해 작동하지 않습니다. 그래서 나는 ','을 사용했다. 이것은 IE 때문입니다. –

+1

작동하지 않는 사항과 오류 메시지의 발생 여부를 설명하십시오. –

-1

자바 스크립트는 하나의 인덱스 배열을 지원하지만 당신이 정말로 두 가지 차원 배열을 원하는 경우,이 할 수 있도록 인덱스가 무엇이든 될 수 있습니다

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

을 즉 구성 요소와 함께 문자열을 키로 사용하십시오.

+3

왜 다차원 배열을 사용하지 않을까요? 'a = []; a [0] = []; a [0] [1] = ...' –

+0

예 : 초기화 문제로 인해 : 색인 당 배열을 만들어야합니다. 내 솔루션으로 어디서나 할당 할 수 있습니다. 또한, 내 솔루션은 임의의 키 (정수뿐만 아니라) 및 희소 배열을 허용합니다. 즉, 느리지 만 일반적으로 사용하고 이해하기 쉽고 디버그하는 것이 더 간단합니다. –

+2

첫 번째 차원의 주어진 인덱스에서 모든 레코드를 구문 분석해야하는 경우 비효율적입니다. – Alsciende