Je veux parcourir un tableau d'objets, convertir la propriété de date en millisecondes, puis me retrouver avec un nouveau tableau, avec les mêmes propriétés que le premier tableau, mais avec la propriété de date modifiée en millisecondes.

Donc pour ça:

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

Je devrais me retrouver avec:

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

J'utilisais la carte comme ceci:

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

... mais il renvoie un tableau d'objets contenant UNIQUEMENT la propriété date, comme ceci:

[
  1593403200000, 
  1595995200000, 
  1598673600000
]

... alors que je veux les objets originaux, juste avec la date convertie en millisecondes. Comment puis-je modifier ma fonction map() pour renvoyer l'intégralité de l'objet d'origine dans le nouveau tableau?

0
Muirik 24 févr. 2021 à 21:37

2 réponses

Meilleure réponse

map renverra un nouveau tableau de valeurs vous revenez de la fonction de rappel. Donc, dans votre cas, vous devez renvoyer l'objet et non la valeur de date.

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