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

333
Views
Necesita explicación del código (cómo funciona y por qué)

Me cuesta entender el siguiente código y cómo funciona realmente.

 var createNestedObject = function( base, names ) { for( var i = 0; i < names.length; i++ ) { base = base[ names[i] ] = base[ names[i] ] || {}; } }; // Usage: createNestedObject( window, ["shapes", "triangle", "points"] ); // Now window.shapes.triangle.points is an empty object, ready to be used.

Es de esta Q/A: Javascript: cómo crear dinámicamente objetos anidados usando nombres de objetos dados por una matriz

¿Puede explicar cómo la base = base[ names[i] ] = base[ names[i] ] || {}; ¿obras?

Mi proceso de pensamiento se atascó y se rompió debido al código anterior. Me vuelve loco.

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

0

¿Puede explicar cómo la base = base[ names[i] ] = base[ names[i] ] || {} ; ¿obras?

Supongamos que estamos en la primera vuelta del bucle, por lo que base es window , i es 0 y names[i] es "shapes". La primera parte a evaluar es base[ names[i] ] || {} . Esto se resolverá en window.shapes si existe, o un objeto vacío si no existe.

A continuación, nos movemos hacia la izquierda a esta asignación:

 base[ names[i] ] = base[ names[i] ] || {};

Eso se va a asignar a window.shapes lo que tengamos del lado derecho. Entonces, si window.shapes ya existe, lo asignamos a sí mismo y nada cambia. O si no existe, le asignamos un objeto vacío.

Y moviéndose hacia la izquierda una vez más:

 base = base[ names[i] ] = base[ names[i] ] || {};

Ahora vamos a reasignar la variable base para que apunte al objeto que acabamos de crear (o al objeto que reutilizamos). Entonces, para el próximo giro del bucle, base ya no es window , es window.shapes .

En este punto, el ciclo se repite, pero nuestras variables ahora están un paso más adelante. base es window.shapes , i es 1 y names[i] es "triangles". Dado que base ahora es window.shapes , estamos probando y asignando a un objeto que es una capa más profunda. Entonces, mientras que la primera vez que pasamos por el bucle nos aseguramos de que existieran window.shapes , esta vez estamos comprobando si window.shapes.triangle existe. Y así continuará, más y más profundamente en el objeto cada vez que pase por el bucle.

about 4 years ago · Juan Pablo Isaza Report

0

La línea de código está haciendo varias, quizás demasiadas, cosas a la vez. Una forma de entenderlo es desarmar las cosas y tener pasos separados:

 // Original line base = base[ names[i] ] = base[names[i]] || {}; // Add parentheses according to JavaScript operator preferences base = base[ names[i] ] = ( base[names[i]] || {} ); // Separate the two assignments base[ names[i] ] = base[names[i]] || {}; base = base[ names[i] ]; // Replace the use of || as null coalescing operator with the ?: operator base[ names[i] ] = base[names[i]] ? base[names[i]] : {}; base = base[ names[i] ]; // Replace the ?: operator with if-else if (base[names[i]]) { base[names[i]] = base[names[i]] } else { base[names[i]] = {} } base = base[ names[i] ]; // Swap if and else branches if (!base[names[i]]) { base[names[i]] = {} } else { base[names[i]] = base[names[i]] } base = base[ names[i] ]; // Get rid of the else branch as it is not doing anything if (!base[names[i]]) { base[names[i]] = {} } base = base[ names[i] ];
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!