Esto me está volviendo loca.
Tengo una matriz como esta:
myArray = ['A', 'B', 'C', 'D', 'E', 'F', ];y mi código está creando un NUEVO objeto que se verá así:
myNewObj = [ { name: "A", displayName: "A" }, { name: "B", displayName: "B" }, { name: "C", displayName: "C" }, { name: "C", displayName: "C" }, { name: "D", displayName: "D" }, { name: "E", displayName: "E" }, { name: "F", displayName: "F" } ]Mi código obtiene valores en myArray y quiero crear myNewObj
Así es como lo estoy haciendo hasta ahora
creo el nuevo objeto
let newObj = [{ "name": "", "displayName": "" }];Luego utilizo un ciclo FOR NEXT simple y funciona hasta un punto y dice newObj[i].name IS UNDEFINED... ¿cómo es eso posible cuando lo estoy definiendo y lo veo en la consola de desarrollo de Google?
for (let i = 0; i < myArray.length; i++) { newObj[i].name = myArray[i]; newObj[i].displayName = myArray[i]; myNewObj.push(newObj); }Sin embargo, constantemente recibo este error:
newObj[i].name NO ESTÁ DEFINIDO y muere.
ACTUALIZACIÓN: todo funciona y aquí están los datos reales REALES
Pero como puede ver, el prototipo está ahí y cuando lo guardo en sessionStorage, obtengo [Object,Object], x 12....
¿Debo eliminar name: y displayName: y colocarlos en otro objeto más?
Usando Array#map :
const myArray = ['A', 'B', 'C', 'D', 'E', 'F']; const myNewArray = myArray.map(e => ({ name: e, displayName: e })); console.log(myNewArray); Su solución (necesita inicializar la matriz como [] y crear un nuevo objeto en cada iteración para impulsarla):
const myArray = ['A', 'B', 'C', 'D', 'E', 'F']; const myNewArray = []; for (let i = 0; i < myArray.length; i++) { const obj = {}; obj.name = myArray[i]; obj.displayName = myArray[i]; myNewArray.push(obj); } console.log(myNewArray);Problema con el código
Estás haciendo el Array.Push incorrectamente. Su let newObj debe ser un objeto, no una matriz. Debe inicializarse dentro del bucle. para que cada ejecución tome una ubicación de memoria diferente. Debe definir myNewObj como una matriz vacía y debe insertar su newObj en la matriz myNewObj dentro del bucle.
violín de trabajo
const myArray = ['A', 'B', 'C', 'D', 'E', 'F']; const myNewObj = []; for (let i = 0; i < myArray.length; i++) { let newObj = { "name": "", "displayName": "" }; newObj.name = myArray[i]; newObj.displayName = myArray[i]; myNewObj.push(newObj); }; console.log(myNewObj);Mejor enfoque
Un mejor enfoque para este problema es usar Array.map . Array.map devuelve una nueva matriz de una matriz existente. Puede ejecutar Array.map en myArray y construir la matriz myNewObj como se muestra a continuación.
violín de trabajo
const myArray = ['A', 'B', 'C', 'D', 'E', 'F']; const myNewObj = myArray.map((item) => ({ name: item, dispayName: item})); console.log(myNewObj) var myArray = ['A', 'B', 'C', 'D', 'E', 'F', ]; var myNewObj = []; for (let i = 0; i < myArray.length; i++) { var newObj = { name:'', displayName:'' }; newObj['name'] = myArray[i]; newObj['displayName'] = myArray[i]; myNewObj.push(newObj); } console.log(myNewObj);