Home > Net >  How can I create an object mapping from an array of strings?
How can I create an object mapping from an array of strings?

Time:06-09

i am stumbling onto something that should be easy, yet i can't seem to be able to do it.

i have an array of string, and i want to map over it to create an object like so :

const monthesList = ['january', 'february', 'march', 'april', 'may']

const myState = monthesList.map(month => (
    month: {selected: false, year: 2022}
    )
  )

what i want is to get the following object :

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
  },
}

Edit: i just found the way :

const myState = monthesList.map(month => (
    {[month] : {
      selected: false,
      year: 2022
    }}
    )
  )

just need to make an object out of it, shouldn't be too hard

CodePudding user response:

The .map() method returns an array, but the output that you're after is an object. You need something that can convert an array of key-value pairs (ie: [key, value]) to an object. For this, we have the Object.fromEntries() method that takes an array of key-value pairs, and from it, constructs an object like so:

const monthesList = ['january', 'february', 'march', 'april', 'may'];

const myState = Object.fromEntries(monthesList.map(month => [
  month, {selected: false, year: 2022}
]));
console.log(myState);

CodePudding user response:

You can use map to generate an array of arrays with the values in each internal array being the month name and object; then use Object.fromEntries to convert that into your desired object:

const monthesList = ['january', 'february', 'march', 'april', 'may']

const myState = Object.fromEntries(
  monthesList.map(m => [m, {selected: false, year: 2022}])
)

console.log(myState)

CodePudding user response:

map will only return an array. Your expected output is an object. There's no need to over-complicate things - use a simple loop instead.

const list = ['january', 'february', 'march', 'april', 'may'];

const myState = {};

for (const month of list) {
  myState[month] = { selected: false, year: 2022 };
}

console.log(myState);

  • Related