2013-03-27 1 views
0

동적으로 생성 된 배열의 속성을 계산하려고합니다.배열의 속성 계산하기

state_list.push({name: state, undergrad: 0, grad: 0, total: 0, programs: []}); 

하고는 이와 같이 채워진 후 후자 :

n = findWithAttr(state_list, 'name', state); 
//n = the index of property "name" with value of "state" in state_list 
if(!(program in state_list[n]["programs"])) {   
state_list[n]["programs"][program] = 1; 
} else { 
state_list[n]["programs"][program]++; 
} 

다음에 I가 배치 된 프로그램의 수를 합계 할 다음과 같이 배열 프로그램 객체 내부에 만들어 배열, 그리고 함께 할 것을 희망했다 :

programs = state.programs; 
console.log(programs.length); 

하지만이 0

를 돌려 그녀의 내가 로그 (프로그램)하면 배열입니다 :

Array[0] 
History, MA: 3 
Info Assurance & Security, MS: 1 
International Literacy, MED: 1 
length: 0 
__proto__: Array[0] 
main.js:237 

그것은 하나의 문자열로 배열에있는 모든 프로그램을 배치하는 것처럼 보입니다. 나는 그들에게 색인을 달고 그것들을 반복 할 수있는 능력을 갖고 싶어한다. 어떤 제안? 상태가 state_list에 어레이에서 오브젝트를 참조하는 경우

+0

if 문장에'program'이 무엇입니까? –

+0

Public Administration, MPA <- "program = data [i] ["Academic Program "]" – Jeremythuff

+0

으로 문제를 해결할 수있는 프로그램의 로그 출력 예입니다. –

답변

0

확인 내가하고 결국 무엇인가 MA : 1 "

1
programs = state.programs; 
console.log(programs.length); 

정확하게 배열의 길이를 반환한다.

내 생각 엔 코드에있는 program이 숫자가 아니며 프로그램이 배열 인덱스가 아닌 개체 속성으로 삽입되고있는 것 같습니다. 길이는 실제로 프로그램 [] 형태로 물건을 추가하는 경우에만 증가합니다. program이 숫자가 아닌 문자열 인 경우 인덱스가 아닌 배열의 속성을 편집하게되므로 길이가 늘어나지 않습니다. "역사 :

programs = state.programs; 
keys = Object.keys(programs); 
//this creates an indexed array of each property in programs 
size = keys.length; 
//this gives me the length of the new array, which I can use for pagination 

다음 내가 지금처럼 반복 할 수 있었다 : 저처럼 읽는 결과를 제공

offset = 0; 
results = 24; 
start = 0;    
$(keys).each(function() { 
    if((start >= offset)&&(start < (offset+results))) { 
    //this conditional gives me the pagination 
     $("#programResult").append("<li>"+this+": "+programs[this]+"</li>"); 
    } 
    start++; 
});