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

148
Views
Confusión para principiantes sobre la sintaxis de JavaScript con respecto a la función de objeto anidado

Me encontré con un problema extraño en este foro anterior sin explicación de por qué funciona ( https://hashnode.com/post/how-to-create-nested-child-objects-in-javascript-from-array-cj9tsc3we01m0uowu4pyuesy0 ) , y aunque pude entender algunas de las otras soluciones que dividen el problema en varias funciones, me llamó la atención una que confundió mucho mi comprensión de algunos conceptos de JavaScript. Aquí está la respuesta dada en cuestión:

 let newArray = [1, 2, 3]; //any array to turn into set of nested objects function arrayToList(insertArray) { let list = {}; for (node = list, i = 0, iterateFor = insertArray.length; i < iterateFor; i++) { node = node[insertArray[i]] = {}; } return list; } console.log(arrayToList(newArray));

Con esto como el resultado esperado:

 {1: {2: {3: { }}}}

Hasta ahora entiendo todo en la estructura del bucle for, pero parece que le falta una línea de código al bloque de código real. ¿En qué punto se inserta el nodo en el nuevo objeto vacío? Mi mejor suposición de por qué esto funciona fue que la variable 'nodo' tenía un valor diferente al principio y al final de cada iteración. Pero cuando registro el nodo en la consola, solo me da una lista vacía: {}

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

0

Registrar el nodo dentro del ciclo le dará un objeto vacío porque siempre le está asignando un objeto vacío en el ciclo. Si está tratando de resolver las cosas, registre la list en su lugar, porque ese es el objeto de nivel superior dentro del cual se asigna todo lo demás.

Este:

 node = node[insertArray[i]] = {};

hace tres cosas: crea un objeto, asigna ese objeto a node[insertArray[i]] y reasigna la variable de node a ese nuevo objeto. Una forma menos confusa de escribirlo sería:

 let newArray = [1, 2, 3]; //any array to turn into set of nested objects function arrayToList(insertArray) { let list = {}; for (node = list, i = 0, iterateFor = insertArray.length; i < iterateFor; i++) { const newNode = {}; node[insertArray[i]] = newNode; node = newNode; } return list; } console.log(arrayToList(newArray));

Ahora el proceso debería ser bastante claro. En cada iteración, se crea un nuevo objeto vacío, ese objeto se asigna al objeto anidado más profundo hasta ahora en la estructura general y luego el node se asigna a ese nuevo objeto vacío (convirtiéndose en el nuevo objeto anidado más profundo).

about 4 years ago · Juan Pablo Isaza Report

0

¿En qué punto se inserta el nodo en el nuevo objeto vacío?

El node variable no se inserta en ningún "nuevo objeto vacío", es al revés .

En la línea 4 de su código, en el bucle for , declara node y lo asigna como referencia al objeto de list preexistente.

Por lo tanto, las primeras actualizaciones a node , por ejemplo, node = node[insertArray[i]] = {}; agrega una propiedad "1" al objeto de list "principal".

Las iteraciones posteriores del bucle for actualizan la propiedad anidada más reciente, a la que hace referencia el node , con un nuevo objeto vacío.

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!