2013-08-23 2 views
1

그래프로 사용되는 데이터가있는 여러 JSON 파일을 가져 오는 일부 JavaScript를 작성 중입니다. 궁극적으로, $.each() 루프 (jQuery가 관련)에서 처리중인 연관 배열의 절대 끝까지 도달했는지 확인해야 다음 JSON 파일을 트리거 할 수 있습니다. 나는 한 단계의 객체를위한 다양한 솔루션에 부딪쳤다. 그러나 다중 객체는 어떤가? 마지막 열의 마지막 행은 그것이 LAST임을 어떻게 알 수 있습니까? 로, 여기 JavaScript 객체 또는 연관 배열의 마지막 항목 식별

{ 
    "Network":{ 
     "Hardware":262464, 
     "Software":53016, 
     "Internal Personnel":440202, 
     "External Personnel":188658, 
     "Outside Services":1344100, 
     "Facilities and Overhead":16172, 
     "Other":92588, 
     "Total":2397200 
    }, 
    "Wide Area Network":{ 
     "Hardware":75600, 
     "Software":18900, 
     "Internal Personnel":132300, 
     "External Personnel":56700, 
     "Outside Services":315000, 
     "Facilities and Overhead":6300, 
     "Other":25200, 
     "Total":630000 
    } 
} 

내가 그 JSON

function buildColumns(array, parent) { 
    $.each(array, function(key, value) { 
     var newParent = $('<column>'); 
     $('<columnBox>').append($('<h2>').html(key)).append(newParent).appendTo(parent); 
     if(value instanceof Object) buildColumns(value, newParent);  
    }); 
} 

루프에서 실행 해요 루프의 거친 생각 의사 재귀 : 여기

내가 함께 일하고 있어요 예 JSON입니다 당신은 볼 수 있고 궁극적으로 제가 사용하는 것일 수는 없습니다. 하지만 너 거기 간다.

+1

정말 문제가 무엇인지 이해하지 않습니다. JS 코드가 작동하지 않는다고 말하는거야? –

+0

$ .each가 .length를 사용하여 객체/배열의 길이를 얻으려면 $ .each 내부를 반복 할 때 각 하위 배열/길이의 길이를 가져올 수 있고 $에서 색인이 반환 될 때까지 프로세스를 반복 할 수 있습니다 . 각각의 길이와 일치합니다 :) –

+0

@AO 당신은 대답에 당신의 코멘트를 이동해야합니다. –

답변

2

length 속성을 사용하면 배열에있는 항목 수를 알 수 있습니다.

예에서 array.length은 항목 수를 반환합니다. 그것은 전달 된 변수가 배열이라고 가정합니다.

당신이 개체에 대해이 작업을 수행 할 수있는 방법은 다음과 같습니다 또한

Object.keys(jsonObject).length 

, 나는 그것이 배열이었다하거나 사용할 수 있습니다, 당신이 길이를 찾기 위해 노력하는 객체 경우 정확하게 확실하지 않았기 때문에

Object.prototype.count = function() { 
    oCount = 0; 
    for(var curObj in this) 
    if(curObj.hasOwnProperty(prop)) oCount++; 
    return oCount; 
}; 

같은 사용하려면 아래 코드는 얼마나 많은 아이들이 찾아 객체에 count 방법을 추가하는

console.log(jsonObject.count()); 
+0

내 이해 (무지가 그 자체를 드러내는 것)는 .length가 객체에만, 배열에 대해서는 작동하지 않는다는 것입니다. 나는 이전에 그 방책에도 충돌했다. –

+0

죄송합니다. 질문에 대한 오해.내 게시물을 편집했습니다 :) – Mark

+1

속성이 hasOwnProperty로 객체에 있는지 확인하십시오. 그렇지 않으면 프로토 타입 체인에서 속성을 가져올 수 있기 때문에 잘못된 계산 결과가 발생할 수 있습니다. –

0

JavaScript 객체의 필드 순서가 일관성이 있다고 보장 할 수 없습니다. 시간이 지남에 따라 또는 다른 브라우저간에도 마찬가지입니다. 여기를 참조하십시오 : Does JavaScript Guarantee Object Property Order?

그래서 마지막 항목은 항상 동일하지 않습니다.

마지막 항목을 갖고 싶으면 개체를 배열에 다시 작성해야합니다.

{ 
    "Network": [ 
     [{"Hardware":262464}], 
     [{"Software":53016}], 
     // ... 
    ], 
    "Wide Area Network":[ 
     [{ "Hardware":75600}], 
     // ... 
    ], 
    // ... 
} 

그는

+0

JSON을 배열로 변환하려고 생각했지만 값에 대한 텍스트 기반 키가 넘겨지지 않습니다. 키를 값에 연결하기 위해 다른 배열을 가져야합니다. 그것은 다루기 힘들어지기 시작할 것입니다. 이것은 PHP에서 쉽게 SOOOOO가 될 것입니다. *한숨* –

관련 문제