Tengo 2 cadenas proporcionadas por el usuario que actúan como una clave y un valor. Digamos, por ejemplo, "foo" y "Hello World!" . ¡Tengo un objeto que quiero modificar y configuro obj.foo en Hello World! .
El problema es que la clave puede conducir a un objeto anidado indefinidamente. Por ejemplo, debería poder usar la clave foo.bar[baz].qux o cualquier secuencia de sintaxis JS extraña como esa para establecer un valor dentro de un objeto anidado, o declarar uno si es necesario.
Además, tendré que acceder a estos valores con otra cadena proporcionada por el usuario que podría tener un formato diferente (por ejemplo, foo[bar][baz][qux] en su lugar). ¿Hay alguna manera de hacer todo esto sin usar eval() ?
Antes de que alguien lo marque, esta pregunta no es un duplicado de la estructura de cambios de un objeto javascript porque
const key = "foo.bar"; const key2 = "foo[bar].baz"; const val = "Hello World!"; let obj = {} obj[key] = val; /* Doesn't work. Object is: * {"foo.bar": "Hello World!"} * but intended output is * {"foo": {"bar": "Hello World!"}} */ obj[key2] = val; // Output: {"foo[bar].baz": "Hello World!"} // Intended: {"foo": {"bar": {"baz": "Hello World!"}}} console.log(obj);