2013-06-10 4 views
2

페이지의 일부 HTML 양식 요소를 반복합니다.다차원 연관 배열에 푸시하는 방법

var itemsArray = new Array(); 
$('input[type="text"].qty').each(function(index) { 
    if($(this).val()) { 
     itemsArray[index]['qty'] = $(this).val(); 
     itemsArray[index]['itemPrice'] = $(this).parents('.control-group').find('.itemPrice').val(); 
     itemsArray[index]['itemID'] = $(this).parents('.control-group').find('.itemID').val(); 
    } 
}); 

index 나는 일반 배열처럼 ... 0, 1, 2, 3 등으로 바라고 있어요. 하위 요소가 연관되어 다양한 값으로 지정됩니다.

콘솔에서이 오류가 발생합니다.

TypeError: itemsArray[index] is undefined

+1

자바 스크립트에는 연관 배열이 없습니다. 배열과 객체가 있습니다. 배열에는 객체가 포함될 수 있으며 객체에는 배열이 포함될 수 있습니다. 귀하의 경우에는 객체 배열이 필요하므로 각 색인에 대해 객체를 배열에 추가 한 다음 객체를 채워야합니다. 객체를 생성 한 다음 배열에 추가 할 수도 있습니다. –

+1

다음과 같이 코드를 압축 할 수 있습니다. http://pastebin.com/H0AP8Y20 –

답변

3

개체 배열을 사용해보십시오. Javascript의 배열은 실제로는 (다차원 부분) 사용자가 사용하는 것이 아닙니다. 또한 new Array()보다 itemsArray = []이 좋습니다.

var itemsArray = []; 
$('input[type="text"].qty').each(function(index) { 
    if($(this).val()) { 
     itemsArray.push({ 
      qty : $(this).val(), 
      itemPrice : $(this).parents('.control-group').find('.itemPrice').val(), 
      itemID : $(this).parents('.control-group').find('.itemID').val() 
     }); 

    } 
}); 
+0

이것은 완벽하게 형식화 된 배열이되었습니다. 감사합니다! – Talon

6

당신은 당신이 그것을 사용하기 전에 외부 배열의 각 항목이 초기화되어 있는지 확인해야합니다. 참고로, 명확성을 위해 아래의 객체 표기법으로 변경했습니다.

+0

PHP 배열 작업을 마친 사람들이 JavaScript 배열에 어려움을 겪고있는 주된 이유입니다. –

+0

@Ghillied - 예 확실히 그렇습니다 –

1

의미가 무엇인지 의미합니다. itemsArray[index]undefined이며이 속성을 할당 할 수 없습니다. "다차원 배열"이 아니라 배열이 이고 배열이입니다. 새로운 각 index에 대해 새 개체를 만들어야합니다.

var $this = $(this); 
if ($this.val()) { 
    var $parent = $(this).parents('.control-group'); // .closest() should suffice 
    itemsArray[index] = { 
     qty: $this.val(), 
     itemPrice: $parent.find('.itemPrice').val(), 
     itemID: $parent.find('.itemID').val() 
    }; 
} 
관련 문제