2010-07-20 3 views
0

En Javascript, comment puis-je obtenir la hiérarchie ancestrale complète dans une chaîne avec un seul objet? En ce moment je ne peux même pas penser à la façon de poser la question ... donc je ne peux même pas le google. Voici un exemple:Javascript: obtenir la hiérarchie complète des objets sous forme de chaîne

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); 

Je veux voir:

"lvl1.lvl2.lvl3" 

possible? Et si je passais dans la dernière ligne de la feuille:

test(lvl1.lvl2.lvl3.what); 

possible? j'espère que le code a du sens ... juste au-dessus de ma tête ...

Merci!

Répondre

2

Impossible d'utiliser des objets JavaScript simples car il n'y a pas de références parent. Voir ce question pour plus de détails.

Malheureusement, il est facile de passer de la représentation de chaîne à l'objet, mais pas l'inverse. Vous devrez coder explicitement les références parentes dans chaque objet, et chaque noeud feuille pour pouvoir aller vers le haut.

+1

merci Anurag ... je suis évidemment cérébrale-morte aujourd'hui (n'ai pas dormi dans plusieurs) ... bien sûr un objet pourrait être référencé par de nombreux autres objets, et donc vous ne pouvez pas vous attendre à avoir un seul parent, ce qui rend ma question muette :) –

0

Vous pouvez faire quelque chose comme ça, mais il ne peut pas identifier le nom de l'élément racine ..

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)); 

Et il ne peut aller outer->inner non l'arround ..

Identifier le premier élément, vous pouvez utiliser un nœud parent vide ..

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

et l'appeler avec alert(test(root));

Questions connexes