2011-08-15 7 views
5

hay una manera de crear automáticamente objetos parciales en una misión después de la construcción, es decirjs Vía de construcción objeto de asignación de propiedad

var obj = {}; 
obj.a.b.c=13; 

lo anterior me da una "obj.a no está definido" error

i escribió una función para hacer esto, pero se preguntó si había una manera más fácil

_setObjectProperty(obj,13,['a','b','c']); 
function _setObjectProperty(obj,value,loc) 
{ 
    if(loc.length>1) { 
     obj[loc[0]] = obj[loc[0]] || {}; 
     _setObjectProperty(obj[loc[0]],value,loc.splice(1)); 
    } 
    else if(loc.length===1) { 
     obj[loc[0]]=value; 
    } 
} 

Respuesta

8

No, no hay una forma incorporada para hacer esto en JavaScript. La única forma es crear tu propia función como lo hiciste. Si desea la conveniencia del operador/notación de puntos, puede usar la siguiente función:

var set = function(path, value, root) { 
    var segments = path.split('.'), 
     cursor = root || window, 
     segment, 
     i; 

    for (i = 0; i < segments.length - 1; ++i) { 
    segment = segments[i]; 
    cursor = cursor[segment] = cursor[segment] || {}; 
    } 

    return cursor[segments[i]] = value; 
}; 

set("a.b.c", 2); 

console.log(a.b.c) // => 2 
+0

Esto es brillante, pero ¿cómo funciona exactamente? No veo dónde se actualiza la raíz. – Tristan

+0

Parece que la raíz es el objeto al que le gustaría adjuntar esa ruta. – diosney

Cuestiones relacionadas