Estaba haciendo otra versión de un reproductor de música y quiero hacer algunas actualizaciones. Estaba a punto de escribir un código que crea todos los elementos deseados en una variable que se usará como una especie de base de datos con el nombre de la canción, el autor y el álbum.
const elements = { "song": { "name": "songname", "author": "songauthor", "album": "songalbum" } };así que copié un poco de código que encontré en un sitio web que crea div con un valor específico
function addElement (element) { var newDiv = document.createElement("div"); var newContent = document.createTextNode(`${element.name} ${element.author} ${element.album}`); newDiv.appendChild(newContent); var currentDiv = document.getElementById("div1"); document.body.insertBefore(newDiv, currentDiv); }y después de eso probé la función forEach que debería crear todos los elementos en la "base de datos"
elements.forEach(() => { addElement(this) })y mi problema es que no funciona a la hora de crear todos los elementos de variable
this no cambia cuando usa una función de flecha, por lo this apunta a la persona que llama a la función principal (o la ventana), no al elemento de matriz dentro de forEach.
Si desea utilizar una función de flecha, proporcione un argumento para que cada elemento de la matriz se pase a la función de flecha.
elements también es un objeto, no una matriz, por lo que no puede llamar directamente a .forEach en él. Sin embargo, puede obtener cada valor almacenado en el objeto usando Object.values y luego llamar a .forEach en eso.
Object.values(elements).forEach(e => { addElement(e); });No puede usar forEach loop en Object , pero puede intentar convertir su objeto en una matriz usando Object.values() u otro método de objeto.