j'ai un tableau d'objets qui a cette structure

let events = [ {
  "initDate": "2019-11-20",
  "finalDate": "2019-11-22",
  "intermediateDates": [
    "2019-11-20",
    "2019-11-21"
  ],
  "priority": 1
},....]

Donc, j'essaie d'obtenir l'objet qui correspond à partir d'un tableau de dates donné, par exemple:

let filteredDays = [
  "2019-11-20",
  "2019-11-21",
  "2019-11-22"
]

j'essaie avec lodash comme ceci:

let eventsFound= [];
  let intersection = _.map( this.events,function(value){
    let inter = _.intersection(value.intermediateDates,filteredDates);
    console.log(inter);
    if(inter != []){
      foundEvents.push(value);
      return value;
    }else{
      return false;
    }
  });

lorsque je console le journal inter, j'obtiens le premier tableau avec des valeurs, puis les tableaux suivants sont vides, mais il continue de pousser tous les événements dans le tableau foundEvents et le tableau renvoyé est le même que le tableau des événements.

1
Eduardo Moreno 7 nov. 2019 à 01:56

1 réponse

Meilleure réponse
    Vous comparez deux tableaux à l'aide de !=. En javascript, [] != [] est toujours vrai. Pour vérifier si un tableau est vide, utilisez la propriété length comme arr.length == 0. Utilisez filter au lieu d'utiliser map comme un forEach. Pour vérifier l'existence, utilisez le combo some / includes au lieu de rechercher des intersections.

Donc, filtrez les événements dont certains de ses intermediateDates sont inclus dans filteredDates:

let eventsFound = _.filter(this.events, event =>
   _.some(event.intermediateDates, date =>
      _.includes(filteredDates, date)
   )
);

La même chose en utilisant des fonctions natives:

let eventsFound = this.events.filter(event =>
   event.intermediateDates.some(date =>
      filteredDates.includes(date)
   )
);
0
ibrahim mahrir 6 nov. 2019 à 23:15