Hola, estoy tratando de crear un objeto que incluya bajo el mismo nombre de propiedad un montón de valores de matriz, esto es lo que estoy intentando
const quiz = [ {question: 'Who is the main character of DBZ', options: ['Vegetta','Gohan','Goku']} ] const newObj = { options: [] } quiz.forEach((item)=>{ item.options.forEach((item, index)=>{ newObj.options[`name${index}`] = item }) })valor esperado =
newObj = { options: [{name: 'Vegetta'},{name:'Gohan'},{name:'Goku'}] }valor real recibido =
newObj = { { options: [ name0: 'Vegetta', name1: 'Gohan', name2: 'Goku' ] }}¡Gracias por adelantado!
Como habrá notado, newObj.options[`name${index}`] = item crea una nueva clave en su matriz de options y la establece en item . En su lugar, desea insertar un objeto de la forma {name: item} en su matriz. Hay algunas formas en las que puedes hacer esto, una forma es usar .push() así:
quiz.forEach((item)=>{ item.options.forEach((item)=>{ newObj.options.push({name: item}); }) }); aunque no es tan común, también puede usar set the current index of options , que es ligeramente diferente al ejemplo anterior, ya que mantendrá el mismo índice, lo que puede ser importante si el quiz es una matriz dispersa que desea mantener igual indexación de options :
quiz.forEach((item)=>{ item.options.forEach((item, index)=>{ newObj.options[index] = {name: item}; }) });Ejemplo de la diferencia:
const arr = [1, 2,,,5]; // sparse array const pushRes = []; const indxRes = []; arr.forEach(n => pushRes.push(n)); arr.forEach((n, i) => indxRes[i] = n); console.log("Push result", pushRes); console.log("Index result", indxRes); Para un enfoque diferente, también tiene la opción de usar algo como .flatMap() y .map() para crear su matriz de options , que puede usar para crear newObj :
const quiz = [ {question: 'Who is the main character of DBZ', options: ['Vegetta','Gohan','Goku']} ]; const options = quiz.flatMap(({options}) => options.map(name => ({name}))); const newObj = {options}; console.log(newObj);