2010-07-20 2 views
0

В Javascript, как я могу получить полную иерархию предков в строке, заданной только одним объектом? Прямо сейчас я не могу даже думать о том, как задавать вопрос ... поэтому я не могу даже это сделать. Вот пример:Javascript: получить полную иерархию объектов как строку

var lvl1 = { one: "one", two: "two" }; 
lvl1.lvl2 = {flip:"flip", flam:"flam"}; 
lvl1.lvl2.lvl3 = {who:"who", what:"what"}; 

test(o) { 
    alert(hierarchyToString(o)); 
} 

var tmp = lvl1.lvl2.lvl3; 
test(tmp); 

Я хочу видеть:

"lvl1.lvl2.lvl3" 

возможно? что, если я пройду в последней строке листа:

test(lvl1.lvl2.lvl3.what); 

возможно? надеюсь, этот код имеет смысл ... просто с моей головы ...

Спасибо!

ответ

2

Невозможно использовать обычные объекты JavaScript, так как нет parent ссылок. См. Это question для более подробной информации.

К сожалению, легко перейти от представления строки к объекту, но не наоборот. Вам нужно будет явно закодировать родительские ссылки в каждом объекте, и каждый листовой узел сможет перемещаться вверх.

+1

спасибо Anurag ... я, очевидно, мертв мозг сегодня (не спал в нескольких) ... конечно, объект может ссылаться на многие другие объекты, и поэтому вы не можете ожидать, что у него будет один родитель, который делает мой вопрос глупым :) –

0

Вы могли бы сделать что-то вроде этого, но он не может определить имя корневого элемента ..

var lvl1 = { one: "one", two: "two" }; 
lvl1.lvl2 = {flip:"flip", flam:"flam"}; 
lvl1.lvl2.lvl3 = {who:"who", what:"what"}; 

function test(o) { 
    for (var item in o) 
    { 
     if (typeof(o[item]) === 'object') 
     { 
      var next = test(o[item]); 
      if (next != '') 
       return item + '.' + next 
      else 
       return item ; 
     } 
    } 
    return ''; 
} 
alert(test(lvl1)); 

И это может пойти только outer->inner не другой путь Arround ..

Для идентификации первый элемент, вы можете использовать пустой родительский узел ..

var root={}; 
root.lvl1 = { one: "one", two: "two" }; 
root.lvl1.lvl2 = {flip:"flip", flam:"flam"}; 
root.lvl1.lvl2.lvl3 = {who:"who", what:"what"}; 

и назвать его alert(test(root));

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