Tengo el siguiente objeto:
const config = { name: "app", android: { name: "app-android", googleMaps: { location: "us", } } } y quiero crear un nuevo objeto dynamicConfig , que copia el objeto de config pero agrega algunos campos a android.googleMaps :
const dynamicConfig = { ...config, android: { ...config.android, googleMaps: { ...config.android.googleMaps, endPoint: "some-endpoint", apiKey: "some-api-key", } } }¿Hay alguna otra forma más limpia de manejar esto? ¿Tengo que esparcir varias veces?
Lo que está preguntando es cómo hacer Deep Merge , lo cual le sugiero que revise primero.
Entonces, ahora verá que, lamentablemente, hay 2 opciones principales para usted.
En caso de que necesite la biblioteca, le sugiero que pruebe Lodash _.merge() .
Puedes probar así. "structuredClone()" crea un clon profundo de un valor dado
const dynamicConfig = structuredClone(config); dynamicConfig.android.googleMaps.endPoint = "some-endpoint"; dynamicConfig.android.googleMaps.apiKey= "some-api-key";Sugiero usar Lodash Merge , es la forma más fácil de realizar una fusión profunda. Por ejemplo:
var merge = require('lodash.merge'); const config = { name: "app", android: { name: "app-android", googleMaps: { location: "us", } } } const additionalConfig = { android: { googleMaps: { endPoint: "some-endpoint", apiKey: "some-api-key", } } } output = merge(config, additionalConfig); console.log(output);Resultado:
{ name: "app", android: { name: "app-android", googleMaps: { apiKey: "some-api-key", endPoint: "some-endpoint", location: "us", } }}