Обращение к объекту в объекте через его полный адрес, переданный в строке
Есть объект:
let obj = {a:{b:{c:10}}};
Получить значение c можно через
obj["a"]["b"]["c"];
obj.a.b.c;
Есть ли возможность обратиться к c через что-то вроде этого
obj["a.b.c"] ?
Ответы (2 шт):
Автор решения: Денис Степанов
→ Ссылка
let obj = {a: {b: {c: 10}}};
function get(obj, path, defaultVal) {
return path.split(".").reduce((acc, prop) => (acc && prop !== "" ? acc[prop] : acc), obj) || defaultVal
}
console.log(get(obj, "", "defaultValue"));
console.log(get(obj, "a.b"));
console.log(get(obj, "a.b.c"));
console.log(get(obj, "c.a.c", "defaultValue"));
obj.get = get.bind(null, obj);
console.log(obj.get(""));
console.log(obj.get("a.b"));
console.log(obj.get("b", "defaultValue"));
function get(path, defaultVal) {
return path.split(".").reduce((acc, prop) => (acc && prop !== "" ? acc[prop] : acc), this) || defaultVal
}
Object.prototype.get = Object.prototype.get || get;
let obj = {a: {b: {foo: "foo"}, boo: "boo"}}
console.log(obj.get("a.b.foo"));
console.log(obj.get("a.boo"));
console.log(obj.get("a.boo.foo", "default value"));
Автор решения: Kopkan
→ Ссылка
Object.prototype.setByPath = function (keys, value, createTree=true){
let object = this;
if(typeof keys === 'string'){ keys = keys.split('.')}
while(keys.length > 1){
let key = keys.shift();
if(createTree && !object[key]){ object[key] = new Object; }
object = object[key];
}
return object[keys.shift()]=value;
}
Object.prototype.getByPath = function (keys, defValue){
let object = this;
if(typeof keys === 'string'){ keys = keys.split('.')}
while(keys.length > 1 && object){
object = object[keys.shift()];
}
if(!object){return defValue;}
return object[keys.shift()];
}
let obj = {a: {b: {c: 10}}};
obj.setByPath("a.b.c", 15);
console.log(obj.getByPath("a.b.c"));