Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

267
Views
¿Cómo realizar una asignación opcional profunda en Javascript?

Digamos que tengo un objeto llamado foo y me gustaría realizar la siguiente operación:

foo.bar.baz.qwer.asdf = 5;

El problema es que la bar puede no existir, pero si existe, entonces el baz dentro de ella puede no existir, etc.

Pensé que sería capaz de hacer algo como esto:

foo?.bar?.baz?.qwer?.asdf = 5 , pero, por desgracia, ese tipo de encadenamiento solo parece funcionar con la recuperación de valores, no con el establecimiento de valores.

El comportamiento deseado es que si algo como baz ya existe, entonces se accede a ese objeto (y se mantienen sus miembros existentes), pero si baz no existe, entonces esa propiedad se crea sobre la marcha.

Es decir, digamos que solo existía foo.bar . Luego, después de la operación de asignación anterior, el objeto resultante sería:

 foo { bar: { baz: { qwer: { asdf: 5 } } } }

Entonces mi pregunta es: ¿se puede hacer esto con construcciones de sintaxis de lenguaje existentes, o se debe crear una función auxiliar? Si es así, ¿tiene este tipo de función un nombre que pueda buscar y hacer referencia?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

He escrito esto:

 function setProperty(obj, property, value) { const properties = property.split('.'); const lastProperty = properties.pop(); for (let prop of properties) { if (!obj[prop]) { obj[prop] = {}; } obj = obj[prop]; } obj[lastProperty] = value; } const startObj = {'a': {}}; setProperty(startObj, 'abcde', 'e is the best letter'); console.log(startObj);

Sin embargo, tendrá comportamientos inesperados si existe una de las propiedades intermedias pero no es un objeto. Por ejemplo, prueba la función anterior con el objeto inicial {a:{b:2}}

Además, tenga en cuenta que el significado de obj cambia a medida que la función procesa. Al principio, se refiere al objeto base, pero luego se refiere a cada objeto anidado durante el ciclo.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!