Reputation: 6289
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?
Upvotes: 0
Views: 1349
Reputation: 1357
let newRecords = records.map(r => ({...r, date: moment(r.date, 'DD/MM/YYYY').valueOf()}));
Upvotes: 1
Reputation: 2452
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
}
Upvotes: 1