Самый простой способ - использовать строку, разбить на точки и зациклить.Когда вы зацикливаетесь, вы проверяете, существует ли оно, если оно есть, вы используете его.Если это не так, то вы создаете новый объект.Вы делаете это, пока не дойдете до конца, где вы установите значение.
const setValue = (obj, path, value) => {
path.split('.') // split on the dots
.reduce((o, k, i, a) => {
o[k] = (i + 1 === a.length) // check if we are at last index
? value // if last index use the value
: (o[k] || {}) // else return object or set new one
return o[k] // return the current step in the object
}, obj) // start location
}
setValue(window, 'a.b.c.d.e.f.g', 'some value')
console.log(a.b.c.d.e.f.g)
var foo = { a : { b: {z : {} } } }
setValue(foo, 'a.b.c.d.e.f.g', 'another value')
console.log(foo)