I want to iterate over an array of objects, convert the date property to milliseconds, and then end up with a new array, with the same properties as the first array, but with the date property changed to milliseconds.
So for this:
let records = [ {id: 1, date: '29/06/2020'}, {id: 2, date: '29/07/2020'}, {id: 3, date: '29/08/2020'} ]
I should end up with:
[ {id: 1, date: 1593403200000} {id: 2, date: 1595995200000} {id: 3, date: 1598673600000} ]
I was using map like so:
let newRecords = records.map(r => r.date = moment(r.date, 'DD/MM/YYYY').valueOf());
… but it returns an array of objects containing ONLY the date property, like so:
[ 1593403200000, 1595995200000, 1598673600000 ]
… whereas I want the original objects, just with the date converted to milliseconds. How can I edit my map()
function to return the entire original object in the new array?
Advertisement
Answer
map will return a new array of values you return from the callback function. So in your case you should return the object and not the date value.
let newRecords = records.map(r => { const date = moment(r.date, 'DD/MM/YYYY').valueOf()); return {...r, date}; // using spread operator just to get a new reference of the object }