2013-10-25 3 views
3

안녕하십니까.개체 배열 javascript

D3에서 collpsible force 레이아웃을 만들기위한 정보가있는 json 파일을로드합니다. 데이터에 접근 할 수는 있지만, 객체의 배열 인 값을 var 링크로 전달할 수는 있지만 시각화 생성에 대한 책임이 있습니다. 누구든지 json의 데이터를 var 링크로 전달할 수 있습니다. 스크립트가 날아갑니다. 소스가있는 위치와 beforePos 및 target 위치와 같은 var 링크를 만들어야합니까? afterPos이며 유형은 "medium"문자열입니다.

var links = [{source: "beforePos", target: "afterPos", type: "medium"},]; 

참고 :로드 된 json은 매우 큽니다.

누구나 나를 도울 수 있습니다!

var links = []; 
for (i = 0; i < jsonFile.generations.length; i++) { 
    for (j = 0; j < jsonFile.generations[i].nodes.length; j++) { 
     for (w = 0; w < jsonFile.generations[i].nodes[j].after.stid.length; w++) { 
      afterPos = jsonFile.generations[i].nodes[j].after.stid[w]; 
      beforePos = jsonFile.generations[i].nodes[j].before.stid[w]; 
      var test = { 
       source: beforePos, 
       target: afterPos, 
       type: "medium" 
      }; 
      links.push(test); 
     } 
    } 
} 
+3

"스크립트가 날아갑니다"는 방식이 너무 모호합니다. 스택 추적을 포함하여 문제가 무엇인지 정확하게 설명하십시오. beforePos, 대상 : afterPos –

+0

proble 내가 beforePos 및 afterPos을 통과 할 때 난 단지 아니오 ENTIER의 사람이 배수 배열 {목적}이 부분 타격 var에 테스트 = { 소스를 만들 테오없는 마지막 값을 볼 수 있다는 것입니다 유형 : "medium" – user2920033

+0

제안 ????????? – user2920033

답변

1

설명을 사용하면 요소를 캐싱하여 처리 속도를 높이는 것이 가장 좋습니다.

var links = []; 
JG = jsonFile.generations; 
for (i = 0, endI = JG.length; i < endI ; i++) { 
    JGIN = JG[i].nodes; 
    for (j = 0, endJ = JGIN.length ; j < endJ ; j++) { 
     JGINJ = JGIN[j]; 
     JGINJAS=JGINJ.after.stid; 
     JGINJBS=JGINJ.before.stid; 
     for (w = 0, endW = JGINJAS.length; w < endW ; w++) { 
      links.push({ 
       source: JGINJAS[w], target: JGINJBS[w], type:"medium" 
      }); 
     } 
    } 
} 

이렇게하면 필요한 시간은 줄어들지 만 i * j * w 객체의 배열은 생성되지 않습니다.

배열을 관리하는 코드를 변경하는 것이 가장 좋습니다. 콜백을 사용하여 요소를 가져오고이 콜백을 사용하여 필요한 json 계층의 요소를 dinamically 결정합니다.