Si quiero verificar un valor de objeto específico (anidado), puedo hacerlo al
if (configuration?.my_project?.frontend?.version)en vez de
if ( configuration && configuration.my_project && configuration.my_project.frontend && configuration.my_project.frontend.version )Pero, ¿cómo manejo esto si quiero hacer esto para claves dinámicas usando variables?
configuration[project][app].version fallaría para { my_project: {} } ya que no hay una frontend .
Entonces, si quiero verificar si falta una version para una aplicación específica en un proyecto específico, voy de esta manera:
if ( configuration && configuration[project] && configuration[project][app] && !configuration[project][app].version ) La única parte que veo es simplemente !configuration[project][app]?.version , pero esto también fallaría para { my_project: {} }
Usar:
configuration?.[project]?.[app]?.version Pero si desea verificar específicamente que falta la version (es decir, falsa), deberá dividir sus pruebas:
const my_app = configuration?.[project]?.[app]; if (my_app && !my_app.version) { ... }Puede usar el encadenamiento opcional para la sintaxis de corchetes así:
const configuration = {} const project = 'someProject' const app = 'someApp' console.log(configuration?.[project]?.[app]?.version) configuration[project] = {} console.log(configuration?.[project]?.[app]?.version) configuration[project][app] = {version: '1.0.0'} console.log(configuration?.[project]?.[app]?.version)Más detalles en la documentación: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining