let johnB = { name: "John Boy" }, lilyA = { name: "Lily Allen" }, peterD = { name: "Peter Drucker" }; const users = new Map([ [johnB, 'boudler'], [lilyA, 'rock'], [peterD, 'stone'] ]) const obj = {}; users.forEach((value, key) => obj[key].name = value) console.log(obj)
Lo anterior no funciona, pero muestra la intención básica. Quiero que la propiedad de nombre de las claves del mapa sea la clave cuando el Mapa se "convierte" en un objeto. Accediendo solo a la clave (sin .name), javascript encadena el objeto para que termine con [objeto, Objeto] como clave.
…un Objeto que tiene un objeto como sus claves?
Eso no existe. Una propiedad de objeto no puede tener un objeto como clave, debe ser una cadena o un símbolo. Lo que estás tratando de lograr simplemente no es posible. Siga usando el Map
: para eso está destinado.
Creo que simplemente tienes una lógica incorrecta en tu bucle foreach... ¿Es esto lo que esperabas?
{ "John Boy": "boudler", "Lily Allen": "rock", "Peter Drucker": "stone" }
let johnB = { name: "John Boy" }, lilyA = { name: "Lily Allen" }, peterD = { name: "Peter Drucker" }; const users = new Map([ [johnB, 'boudler'], [lilyA, 'rock'], [peterD, 'stone'] ]) const obj = {}; users.forEach((value, key) => obj[key.name] = value) console.log(obj)