2014-03-13 2 views
0

주어진 날짜와 연관된 여러 행의 데이터를 제출할 수있는 양식이 있습니다. 해당 입력란 중 하나가 비율 (예 : 0-100)입니다. 주어진 날짜의 세 행에 100을 더하는 (또는 그렇지는 않지만 다른 유효성 검사 문제) 또는 날짜와 관련 비율이 다른 두 행을 가질 수 있습니다.JavaScript 배열에 행을 추가하여 예상대로 작동하지 않습니다.

나는 모든 것을 추적해야합니다. 제출시 모든 백분율을 올바른 날짜 버킷으로 정렬하여 유효성 검사를 수행 할 수 있습니다.

이 목적을 위해 필자는 PctArray 배열을 만들었습니다. PctArray의 각 요소는 두 개의 필드 Object - date, pct입니다. 제출 된 데이터를 반복하면서 각 행의 날짜를 확인하여 PctArray에 이미 있는지 확인하고, 그렇다면 해당 날짜의 관련 pct 필드를 증가시키고 계속 이동합니다. 그렇지 않으면 PctArray에 새 요소를 만들고 정보를 삽입합니다.

제출 된 행이 하나뿐이거나 한 날짜에 여러 행이있는 경우 모두 잘 작동합니다. 그러나 두 번째 날짜에 대한 정보를 제출하는 순간, 그것은 질식합니다. 이 시점에서 코드를 제공합니다 :

     // If this is our first row to process 

        if(PctArray.length == 0){ 
         PctArray[0] = new Object(); 
         PctArray[0].effdt = datefield.options[datefield.selectedIndex].value; 
         PctArray[0].pct = parseInt(pctfield.value); 
        } 
        else{ 
         // We loop through the array to see if this EffDt exists yet. Not very efficient, but the array will always be small 
         var found = "no"; 

         for(p=0;p<PctArray.length;p++){ 
          if(PctArray[p].effdt == datefield.options[datefield.selectedIndex].value){ 
           PctArray[p].pct = PctArray[p].pct + parseInt(pctfield.value); 
           found = "yes"; 
          } 
         } 

         if(found == "no"){ 
          PctArray[PctArray.length] = new Object(); 
          PctArray[PctArray.length].effdt = datefield.options[datefield.selectedIndex].value; 
          PctArray[PctArray.length].pct = pctfield.value; 
         } 

        } 

initital은 첫 ​​번째 행이 될 때 모든 것이 생성되고 올바르게 삽입됩니다. 그러나 블록 if(found == "no")에 들어가야 할 경우 새 요소가 만들어 지지만 Unable to set value of the property 'effdt': object is null or undefined이라는 첫 번째 할당 문에서 종료됩니다.

나는 그것을 얻지 않는다. 나는 두 요소 모두에서 새로운 요소를 똑같은 방식으로 선언하고 있지만, 두 번째에 대해서는별로 마음에 들지 않는 부분이 있습니다.

나는 또한 new Object(){"effdt":'', "pct":''}으로 대체하여 동일한 결과를 얻으려고 시도했습니다. 그것은 상단의 것이지, 하단의 것이 아닙니다.

나는 분실했습니다. 아무도 내가 여기에서 놓친 것을 본다?

감사합니다.

답변

1
PctArray[PctArray.length] = new Object(); 
PctArray[PctArray.length].effdt = datefield.options[datefield.selectedIndex].value; 

첫 번째 할당 후 PctArray.length이 증가하여 존재하지 않는 요소를 처리하려고합니다. 명시 적으로 할당을 조합하여 코드를 향상시킬 수 있습니다. new Object() :

PctArray.push( 
    { effdt: datefield.options[datefield.selectedIndex].value 
    , pct: pctfield.value 
    }) 
+0

OF 코스 !!!!! 세상에, 내가 그걸 놓친 걸 믿을 수가 없어 !!! 고맙습니다!!! 이것은 너무 오래 문제를 쳐다보고, 당신은 분명히 그리워! 웃음! –

관련 문제