• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
    • Preguntas
    • Profesores
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Pruebas Online
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

190
Vistas
¿Cómo recorro un objeto anidado y luego agrego los valores a las celdas de la tabla HTML, en Javascript?

Me gustaría insertar datos JSON analizados en una tabla HTML a través de Javascript. Creo que estoy cerca de una solución, pero no puedo descifrar el paso final.

Objetivo: necesito insertar el nombre, la edad, la identidad secreta y los poderes de tres superhéroes en sus respectivas columnas en una tabla. Los datos provienen de un archivo JSON. Lo analicé y está listo para usar en Javascript. Quiero recorrer los objetos dentro de los datos e insertar los datos correctos en las celdas. No tengo permitido usar jQuery o técnicas similares.

Problema: el problema es que parece que no puedo recorrer los objetos (nombre, edad, etc.) para cada superhéroe y agregarlo a la celda. ¿Cómo apunto/hago referencia a los objetos para usarlos en un bucle? Por ejemplo, esto 'funciona', pero da un resultado incorrecto ya que no quiero recorrer los nombres:

Código JavaScript:

 for(i = 0; i < members.length; i++) { function addRow(tableID) { let tableRef = document.getElementById(tableID); let newRow = tableRef.insertRow(-1); for(x = 0; x < 4; x++) { let newCell = newRow.insertCell(0); let newText = document.createTextNode(members[i].name); newCell.appendChild(newText); }

ingrese la descripción de la imagen aquí

En cambio, quiero recorrer el objeto de esta manera, de manera horizontal.

ingrese la descripción de la imagen aquí

Solución esperada: espero que la solución se vea así, pero no funciona:

 for(x = 0; x < 4; x++) { let newCell = newRow.insertCell(0); let newText = document.createTextNode(members[i].obj[x]); newCell.appendChild(newText);

datos JSON:

 const data = [ { squadName : 'Super Hero Squad' , homeTown : 'Metro City' , formed : 2016 , secretBase : 'Super tower' , active : true , members : [ { name : 'Molecule Man' , age : 29 , secretIdentity : 'Dan Jukes' , powers : [ 'Radiation resistance' , 'Turning tiny' , 'Radiation blast' ] } , { name : 'Madame Uppercut' , age : 39 , secretIdentity : 'Jane Wilson' , powers : [ 'Million tonne punch' , 'Damage resistance' , 'Superhuman reflexes' ] } ] } //, {} ]

¿Hay alguien que pueda ayudar? ¡Gracias por adelantado!

almost 3 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Simplemente recorra cada propiedad del member[i]

 for (i = 0; i < members.length; i++) { addRow('table', members[i]); } function addRow(tableID, member) { let tableRef = document.getElementById(tableID); let newRow = tableRef.insertRow(-1); for (let prop in member) { let newCell = newRow.insertCell(-1); let newText = document.createTextNode(member[prop]); newCell.appendChild(newText); } }
almost 3 years ago · Juan Pablo Isaza Denunciar

0

No estoy 100% seguro de qué columnas necesita, pero creo que esto se acerca a lo que quería. Con suerte, puede ver el patrón general para crear un elemento DOM, llenarlo con datos y agregarlo a la tabla.

 const data = [ { squadName : 'Super Hero Squad' , homeTown : 'Metro City' , formed : 2016 , secretBase : 'Super tower' , active : true , members : [ { name : 'Molecule Man' , age : 29 , secretIdentity : 'Dan Jukes' , powers : [ 'Radiation resistance' , 'Turning tiny' , 'Radiation blast' ] } , { name : 'Madame Uppercut' , age : 39 , secretIdentity : 'Jane Wilson' , powers : [ 'Million tonne punch' , 'Damage resistance' , 'Superhuman reflexes' ] } ] } //, {} ] const table = document.getElementById('root'); data.forEach(squad => { squad.members.forEach(hero => { const tr = document.createElement("tr") const nameTd = document.createElement("td") nameTd.append(hero.name) const ageTd = document.createElement("td") ageTd.append(hero.age) const secretTd = document.createElement("td") secretTd.append(hero.secretIdentity) const powersTd = document.createElement("td") powersTd.append(hero.powers.join(', ')) tr.append(nameTd) tr.append(ageTd) tr.append(secretTd) tr.append(powersTd) table.append(tr) }) })
 td { border: solid black 1px; }
 <table id="root"> </table>

almost 3 years ago · Juan Pablo Isaza Denunciar

0

Lo que está buscando en el bucle anidado, el horizontal, es "for in". "for in" recorrerá las propiedades de un Objeto. Consulte este artículo

https://www.w3schools.com/js/js_loop_forin.asp

Pero no le recomiendo que use este método: simplemente acceda al valor de la clave para generar cada columna ( <td> ), porque el orden de las claves no está garantizado en un bucle. Aún debe verificar la clave en el bucle anidado para que sea seguro.

¿JavaScript garantiza el orden de las propiedades de los objetos?

almost 3 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda