2016-06-11 1 views
4

Я пытаюсь Переберите объект Json, который будет выглядеть как этотперекручивания через объект JSON с несколькими детьми с использованием Java Script

[ 
     { 
     "yang_type": "container", 
     "name": "c1", 
     "value": "", 
     "children": [ 
      { 
      "yang_type": "", 
      "name": "type", 
      "value": "Uint32", 
      "children": [] 
      }, 
      { 
      "yang_type": "list", 
      "name": "DNS", 
      "value": "", 
      "children": [ 
       { 
       "name": "type", 
       "value": "String", 
       "children": [], 
       "yang_type": "" 
       }, 
       { 
       "yang_type": "leaf", 
       "name": "ip-address", 
       "value": "", 
       "children": [ 
        { 
        "name": "type", 
        "value": "string", 
        "children": [], 
        "yang_type": "" 
        } 
       ] 
       }, 
       { 
       "yang_type": "leaf", 
       "name": "Domain", 
       "value": "", 
       "children": [ 
        { 
        "name": "type", 
        "value": "string", 
        "children": [], 
        "yang_type": "" 
        } 
       ] 
       } 
      ] 
      } 
     ] 
     } 
    ] 

Я пытаюсь этой логикой, но это не цикл через первый Чайлдс ребенок.

while(m.children.length >= 1) { 
    if(m.yang_type!='' && m.name!=''){ 
     {$log.error("parent:",m.yang_type,m.name);} 
    } 
    if(m.name!='' && m.value!=''){ 
     {$log.error("child:",m.name,m.value);} 
    } 
    m = m.children[m.children.length - 1]; 
} 

Приведенный выше код не охватывает всех детей. что я делаю неправильно?

+0

Пожалуйста, не редактируйте свой вопрос, чтобы включить новую проблему. Вместо этого создайте новый вопрос. – Matt

+0

Если я это сделаю. Ppl отметьте его как дубликат :) в любом случае позвольте мне создать новый – Nadvez

ответ

1

Вы пытаетесь пересечь массив. Ваша попытка не работает.

Вы можете использовать обратный вызов для итерации и взять его для рекурсивного вызова для детей.

function loop(a) { 
 
    console.log(a.name);         // process you data 
 
    Array.isArray(a.children) && a.children.forEach(loop); // check and iterate children 
 
} 
 

 
var data = [{ "yang_type": "container", "name": "c1", "value": "", "children": [{ "yang_type": "", "name": "type", "value": "Uint32", "children": [] }, { "yang_type": "list", "name": "DNS", "value": "", "children": [{ "name": "type", "value": "String", "children": [], "yang_type": "" }, { "yang_type": "leaf", "name": "ip-address", "value": "", "children": [{ "name": "type", "value": "string", "children": [], "yang_type": "" }] }, { "yang_type": "leaf", "name": "Domain", "value": "", "children": [{ "name": "type", "value": "string", "children": [], "yang_type": "" }] }] }] }]; 
 

 
data.forEach(loop);

Edit с отступом выходом.

function loop(level) { 
 
    return function (a) { 
 
     var i = level, s = ''; 
 
     while (i--) { 
 
      s += ' '; 
 
     } 
 
     if (level) { 
 
      s += '*'; 
 
     } 
 
     a.yang_type ? 
 
      console.log(s + a.yang_type + ' ' + a.name) : 
 
      console.log(s + a.name + ' ' + a.value); 
 
     Array.isArray(a.children) && a.children.forEach(loop(level + 1)); 
 
    } 
 
} 
 

 
var data = [{ "yang_type": "container", "name": "c1", "value": "", "children": [{ "yang_type": "", "name": "type", "value": "Uint32", "children": [] }, { "yang_type": "list", "name": "DNS", "value": "", "children": [{ "name": "type", "value": "String", "children": [], "yang_type": "" }, { "yang_type": "leaf", "name": "ip-address", "value": "", "children": [{ "name": "type", "value": "string", "children": [], "yang_type": "" }] }, { "yang_type": "leaf", "name": "Domain", "value": "", "children": [{ "name": "type", "value": "string", "children": [], "yang_type": "" }] }] }] }]; 
 

 
data.forEach(loop(0));