Estoy creando una aplicación de seguimiento de gastos que guarda los datos ingresados en un formulario, luego los registra en una tabla debajo de las entradas (Nombre, Fecha y Cantidad), luego guarda esos datos en el almacenamiento local del navegador como una matriz. Estoy tratando de recuperar los datos de la tabla tal como se registraron en la tabla (en las filas y columnas correctas) cuando se vuelve a cargar la página.
//FUNCTION TO GET EXISTING EXPENSES FROM LOCAL STORAGE WHEN PAGE IS REFRESHED (display Table on the screen with refreshing Page) function getExpenses(expenses) { //CHECK If an expense exists in Local Storage //Checks if expense exists if (localStorage.getItem("expenses") === null) { expenses = []; //create a new array for expenses if none exists } else { expenses = JSON.parse(localStorage.getItem("expenses")); //Gets back the array of existing expenses if expenses exist } expenses.forEach((item) => { //create <tr></tr> const tableRow = document.createElement("tr"); //new table row tableRow.classList.add("table-row"); //set class to t-row tableHead.appendChild(tableRow); //Append new row(.tableHead) to the table in HTML //create <td></td> const tableDataA = document.createElement("td"); //New Table Data Element tableDataA.innerText = item; tableRow.appendChild(tableDataA); const tableDataB = document.createElement("td"); tableDataB.innerText = item; tableRow.appendChild(tableDataB); const tableDataC = document.createElement("td"); tableDataC.innerText = item; tableRow.appendChild(tableDataC); //APPEND expenseTable.appendChild(tableRow); //To Append .t-row to the Table element in our HTML file }); }Según el resultado que obtiene, expenses son una matriz de cadenas en lugar de una matriz de objetos. Por lo tanto, debe iterarlo en grupos de 3, colocando elementos secuenciales de cada grupo en un TD diferente.
No puede hacer esto fácilmente con forEach() , así que use un bucle for .
for (let i = 0; i < expenses.length; i += 3) { //create <tr></tr> const tableRow = document.createElement("tr"); //new table row tableRow.classList.add("table-row"); //set class to t-row tableHead.appendChild(tableRow); //Append new row(.tableHead) to the table in HTML //create <td></td> const tableDataA = document.createElement("td"); //New Table Data Element tableDataA.innerText = expenses[i]; tableRow.appendChild(tableDataA); const tableDataB = document.createElement("td"); tableDataB.innerText = expenses[i + 1]; tableRow.appendChild(tableDataB); const tableDataC = document.createElement("td"); tableDataC.innerText = expenses[i + 2]; tableRow.appendChild(tableDataC); //APPEND expenseTable.appendChild(tableRow); //To Append .t-row to the Table element in our HTML file } Probablemente sería mejor si rediseñara su matriz de expenses para que sea una matriz de objetos en lugar de elementos separados para cada columna, por ejemplo
[ { name: "Gym", date: "2022-02-15", amount: 200 }, { name: "Grocery", date: "2022-02-20", amount: 500 } ]