2016-08-08 52 views
1

最後一個子元素我有結構類似於一個JSON文件:誰是活着查找JSON文件

"FAMILY": { 
     "1": { 
      "ANNA": { 
       "name": "ANNA X", 
       "alive": true, 
       "children": { 
        "MAX": { 
         "name": "MAX X", 
         "alive": false, 
         "children": {} 
        }, 
        "TOM": { 
         "name": "TOM X", 
         "children": { 
          "TOM JR": { 
          "name": "MAX X", 
          "alive": true, 
          "children": {...} 
          } 
         } 
        } 
       } 
      } 
     }, 
     "2":... 
} 

我想找到的最後一個孩子(孩子的數據)。我們不知道家庭成員的人數,所以我不能爲每個人做一個循環。 我該怎麼做?環住安娜的家人,找到最後一個小孩。

謝謝。

+1

如果MAX和TOM每個都有3個孫輩,那該怎麼辦?你想要他們嗎? – smoksnes

+0

只有一個安娜的孩子可以生孩子。這對其他家庭成員來說也是一樣的。 – PSport

+0

您是否熟悉樹型數據結構?你基本上是在尋找樹的深度,稍作修改,在你到達樹葉時檢查這個人是否還活着。 –

回答

0

你需要遞歸中的每個節點有迭代和計算水平深度。您還需要一個變量來保持最深層次的節點。當遞歸結束時,您返回變量。尋找遞歸和冒泡排序。

+0

好的,謝謝你的建議。我會嘗試 – PSport

0

我希望這應該是幫助,在這裏,我認爲你的對象是在obj可變

var last_member =null; 
function getLastChildren(obj) 
{ 
    for(i in obj) 
    { 
     if(typeof obj[i].children !== "undefined") 
     { 
      getLastChildren(obj[i].children); 
     } 
     else if(typeof obj[i].alive !== "undefined" && obj[i].alive) 
     { 
      last_member=obj[i]; 
     } 
    } 
} 
getLastChildren(obj.FAMILY); 
console.log(last_member); 

另一種解決方案爲獲取最深層次的最後一名成員

var last_member =null; 
var deep_level=0; 
function getLastChildren(obj, current_level) 
{ 
    for(i in obj) 
    { 
     if(typeof obj[i].children !== "undefined") 
     { 
      getLastChildren(obj[i].children, current_level+1); 
     } 
     else if(typeof obj[i].alive !== "undefined" && obj[i].alive current_level>=deep_level) 
     { 
      last_member=obj[i]; 
      deep_level=current_level; 
     } 
    } 
} 
getLastChildren(obj.FAMILY,1); 
console.log(last_member); 

感謝

+0

它只需要第一個孩子。我們需要深入最深層次的孩子。 – Doruk

+0

啊,是讓我修改答案 –

+0

感謝您的幫助。是的,這是我已經嘗試過,但它只循環第一個孩子。所以我無法訪問其他孩子。 – PSport