2015-06-21 3 views
0

Благодарим вас за отзыв, так как это мой первый вопрос. Я попробую еще раз.Получение родителя JSON для узла

У меня есть объект JSON, как например:

var obj =  { 
     "data":[ 
      { 
      "data":{ 
       "title":"title1", 
       "attr":{ 
        "id":111 
       } 
      }, 
      "children":[ 
       { 
        "data":{ 
         "title":"title2", 
         "attr":{ 
         "id":222 
         } 
        }, 
        "children":[ 
         { 
         "data":{ 
          "title":"title3", 
          "attr":{ 
           "id":333 
          } 
         } 
         } 
        ] 
       }, 
       { 
        "data":{ 
         "title":"title4", 
         "attr":{ 
         "id":444 
         } 
        }, 
        "children":[ 
         { 
         "data":{ 
          "title":"title5", 
          "attr":{ 
           "id":555 
          } 
         } 
         } 
        ] 
       } 
      ] 
      } 
     ] 
    }; 

Учитывая значение идентификатора, я хотел бы, чтобы проследить «родословную» к нему через титульных свойства следующим образом: с учетом 222, я должен получить титул 1; учитывая id 333, я должен получить title1> title 2; данный id 555, я должен получить title1> title 4. Обратите внимание, что это не родители, а братья и сестры родителей, поскольку каждый объект данных сопряжен с массивом «дочерних» объектов.

Я попытался следующие:

var x = 555; 

var path = ""; 
function search(path, obj, target) { 
    for (var k in obj) { 
     if (obj[k] === target) { 
      return path + "['" + k + "']" 
     } 
     else if (typeof obj[k] === "object") {      
      var result = search(path + "['" + [k] + "']", obj[k], target); 
      if (result) 
       return result; 
     } 
    } 
    return false; 
} 

var path = search(path, obj, x); 
console.log(path); // "['data']['0']['children']['1']['children']['0']['data']['attr']['id']" 

Но я не был в состоянии получить название атрибутов, чтобы вернуться. Любая помощь будет очень признательна и благодарна за терпение каждого.

+1

какие усилия вы сделали? –

+1

Чтобы прослушать с предыдущим комментарием: http://stackoverflow.com/help/how-to-ask – Jan

ответ

0

С помощью петли, чтобы найти элемент, указанный можно попробовать:

var obj={"data":[{"data":{"title":"title1","attr":{"id":111}},"children":[{"data":{"title":"title2","attr":{"id":222}},"children":[{"data":{"title":"title3","attr":{"id":333}},"children":[{"data":{"title":"title4","attr":{"id":444}},"children":[{"data":{"title":"title5","attr":{"id":555}},"children":[]}]}]}]}]}]} 
 

 
var current = obj.data[0], titles = []; 
 

 
while(current.data && current.data.attr.id != 444){ 
 
\t titles.push(current.data.title); 
 
\t current = current.children[0] || {} 
 
} 
 

 
document.write(titles.join(" > "));

+0

Спасибо, но если у моего дерева есть братья и сестры, как в моем новом примере выше, этот ответ потерпит неудачу. Я пробовал работать через него, но не смог найти решение, посмотри, что я пытался вместо этого. Еще раз спасибо! – levProg

Смежные вопросы