Расширить объект JavaScript, передав строку с путем и значением
Есть ли простой способ расширить объект JavaScript, передав строку и значение?
В основном мне нужно что-то вроде этого:
myObject = {}
var extendObj = function(obj, path, value){
}
var path = "a.b.c", value = "ciao";
extendObj(myObject, path, value);
console.log(myObject.a.b.c) //will print "ciao"
1 ответ
Решение
myObject = {};
var extendObj = function (obj, path, value) {
var levels = path.split("."),
i = 0;
function createLevel(child) {
var name = levels[i++];
if(typeof child[name] !== "undefined" && child[name] !== null) {
if(typeof child[name] !== "object" && typeof child[name] !== "function") {
console.warn("Rewriting " + name);
child[name] = {};
}
} else {
child[name] = {};
}
if(i == levels.length) {
child[name] = value;
} else {
createLevel(child[name]);
}
}
createLevel(obj);
return obj;
}
var path = "a.b.c",
value = "ciao";
extendObj(myObject, path, value);
console.log(myObject.a.b.c) //will print "ciao"
http://jsfiddle.net/DerekL/AKB4Q/
Вы можете увидеть в консоли, что он создает путь в соответствии с path
вы вошли.