Я хочу перебрать массив объектов, преобразовать свойство даты в миллисекунды, а затем получить новый массив с теми же свойствами, что и первый массив, но со свойством даты, измененным на миллисекунды.

Итак, для этого:

let records = [
  {id: 1, date: '29/06/2020'},
  {id: 2, date: '29/07/2020'},
  {id: 3, date: '29/08/2020'}
]

Я должен в конечном итоге:

[
  {id: 1, date: 1593403200000}
  {id: 2, date: 1595995200000}
  {id: 3, date: 1598673600000}
]

Я использовал карту так:

 let newRecords = records.map(r => r.date = moment(r.date, 'DD/MM/YYYY').valueOf());

... но он возвращает массив объектов, содержащих ТОЛЬКО свойство даты, например:

[
  1593403200000, 
  1595995200000, 
  1598673600000
]

... тогда как мне нужны исходные объекты, только с датой, преобразованной в миллисекунды. Как я могу отредактировать мою функцию map(), чтобы вернуть весь исходный объект в новом массиве?

0
Muirik 24 Фев 2021 в 21:37

2 ответа

Лучший ответ

map вернет новый массив значений. вы возвращаетесь из функции обратного вызова. Итак, в вашем случае вы должны вернуть объект, а не значение даты.

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
}
1
vatz88 24 Фев 2021 в 18:43
let newRecords = records.map(r => ({...r, date: moment(r.date, 'DD/MM/YYYY').valueOf()}));
1
Marcus Fonseca 24 Фев 2021 в 18:43