"데모"의 오른쪽은 JSON의 총 끝점 수 (또는 "leafs")를 재귀 적으로 계산하기를 원하지 않는다는 것을 의미합니다. 트리의 각 범주 (비 리프 노드)에 대한 재귀 크기를 알고 싶습니다. 여기서 핵심은 잎과 뿌리 사이의 노드가 중요하지 않다는 것입니다.
업데이트 :; 아래를 읽으십시오.
이 시도 : 새 키 'num_children'
트리의 각 잎 이외의 노드에 추가되도록
function parseTree(parent) {
var hasNonLeafNodes = false;
var childCount = 0;
for (var child in parent) {
if (typeof parent[child] === 'object') {
// Parse this sub-category:
childCount += parseTree(parent[child]);
// Set the hasNonLeafNodes flag (used below):
hasNonLeafNodes = true;
}
}
if (hasNonLeafNodes) {
// Add 'num_children' element and return the recursive result:
parent.num_children = childCount;
return childCount;
} else {
// This is a leaf item, so return 1:
return 1;
}
}
이 기능은 , 원래 객체를 수정합니다. 은을 모든 parent
의 자손에있는 전체 리프 노드 수로 반환합니다. 객체의 하위 집합에서이 함수를 호출 할 수도 있습니다. 그것에 대해 죄송합니다 http://jsfiddle.net/PPvG/CXXaB/
:
여기에 라이브 데모입니다! 나는 조금 다른 것을해야했고, 분명히 내가 여기서하고 있었던 것을 잊었다 ...-)
업데이트 된 솔루션은 주소를 올바르게 계산해야하지만 배열에는 이름이 지정된 키 (예 : num_children
). 이 예는 귀하의 예와 관련이 있습니다. "Pothole"은 배열입니다.
코드를 작성한 적이 있습니까? 당신이 가지고있는 것을 보여주십시오. – Hogan
@Hogan http://codepad.org/Wjlr1rJW –