Saltar al contenido

Objetos Javascript: obtener padre

No olvides que en la informática un problema casi siempre tiene diversas resoluciones, así que aquí te compartiremos la mejor y más eficiente.

Solución:

Un objeto anidado (hijo) dentro de otro objeto (padre) no puede obtener datos directamente de su padre.

Echa un vistazo a esto:

var main = 
    name : "main object",
    child : 
        name : "child object"
    
;

Si le pregunta al objeto principal cuál es su nombre secundario (main.child.name) lo conseguiras.
En cambio, no puede hacerlo al revés porque el niño no sabe quién es su padre.
(Puedes obtener main.name pero no lo conseguirás main.child.parent.name).

Por cierto, una función podría ser útil para resolver esta pista.
Ampliemos el código anterior:

var main = 
    name : "main object",
    child : 
        name : "child object"
    ,
    init : function() 
        this.child.parent = this;
        delete this.init;
        return this;
    
.init();

Dentro de init función puede obtener el objeto principal simplemente llamando this.
Así definimos la parent propiedad directamente dentro de la child objeto.
Entonces (opcionalmente) podemos quitar el init método.
Finalmente devolvemos el objeto principal como salida del init función.

Si tratas de conseguir main.child.parent.name ahora lo harás bien.
Es un poco complicado pero funciona bien.

No. No hay forma de saber de qué objeto proviene.

s y obj.subObj ambos simplemente tienen referencias al mismo objeto.

También podrías hacer:

var obj =  subObj: foo: 'hello world' ;
var obj2 = ;
obj2.subObj = obj.subObj;
var s = obj.subObj;

Ahora tiene tres referencias, obj.subObj, obj2.subObjy s, al mismo objeto. Ninguno de ellos es especial.

Esta es una vieja pregunta, pero cuando la encontré buscando una respuesta, pensé que agregaría mi respuesta para ayudar a otros tan pronto como tengan el mismo problema.

Tengo una estructura como esta:

var structure = 
    "root":
        "name":"Main Level",
        nodes:
            "node1":
                "name":"Node 1"  
            ,
            "node2":
                "name":"Node 2"  
            ,
            "node3":
                "name":"Node 3"  
            
        
    

Actualmente, al hacer referencia a uno de los subnodos, no sé cómo obtener el nodo principal con su valor de nombre “Nivel principal”.

Ahora presento una función recursiva que recorre la estructura y agrega un padre attribute a cada objeto de nodo y lo llena con su padre así.

var setParent = function(o)
     if(o.nodes != undefined)
          for(n in o.nodes)
              o.nodes[n].parent = o;
              setParent(o.nodes[n]);
          
     

Luego simplemente llamo a esa función y ahora puedo obtener el padre del nodo actual en este árbol de objetos.

setParent(structure.root);

Si ahora tengo una referencia al segundo subnodo de la raíz, simplemente puedo llamar.

var node2 = structure.root.nodes["node2"];
console.log(node2.parent.name);

y generará “Nivel principal”.

Espero que esto ayude..

Reseñas y puntuaciones

Si para ti ha sido de provecho este artículo, te agradeceríamos que lo compartas con el resto entusiastas de la programación de este modo nos ayudas a dar difusión a esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *