Estoy tropezando con algo que debería ser fácil, pero parece que no puedo hacerlo.
Tengo una matriz de cadenas y quiero mapearlas para crear un objeto como este:
const monthesList = ['january', 'february', 'march', 'april', 'may'] const myState = monthesList.map(month => ( month: {selected: false, year: 2022} ) )lo que quiero es obtener el siguiente objeto:
myState ={ january:{ selected: false, year: 2022 }, february:{ selected: false, year: 2022 }, march:{ selected: false, year: 2022 }, april:{ selected: false, year: 2022 }, may:{ selected: false, year: 2022 }, }Editar: acabo de encontrar el camino:
const myState = monthesList.map(month => ( {[month] : { selected: false, year: 2022 }} ) )solo necesito hacer un objeto con él, no debería ser demasiado difícil
El método .map() devuelve una matriz, pero el resultado que busca es un objeto. Necesita algo que pueda convertir una matriz de pares clave-valor (es decir: [key, value] ) en un objeto. Para esto, tenemos el método Object.fromEntries() que toma una matriz de pares clave-valor y, a partir de ella, construye un objeto como este:
const monthesList = ['january', 'february', 'march', 'april', 'may']; const myState = Object.fromEntries(monthesList.map(month => [ month, {selected: false, year: 2022} ])); console.log(myState);Puede usar map para generar una matriz de matrices con los valores en cada matriz interna como el nombre del mes y el objeto; luego use Object.fromEntries para convertir eso en su objeto deseado:
const monthesList = ['january', 'february', 'march', 'april', 'may'] const myState = Object.fromEntries( monthesList.map(m => [m, {selected: false, year: 2022}]) ) console.log(myState)map solo devolverá una matriz. Su salida esperada es un objeto. No hay necesidad de complicar demasiado las cosas; en su lugar, use un bucle simple .
const list = ['january', 'february', 'march', 'april', 'may']; const myState = {}; for (const month of list) { myState[month] = { selected: false, year: 2022 }; } console.log(myState);