Получение объекта из массива объектов, совпадающих со значениями внутри и массивом дат с помощью lodash - PullRequest
1 голос
/ 07 ноября 2019

У меня есть массив объектов с такой структурой

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

Итак, я пытаюсь получить объект, который соответствует данному массиву дат, например:

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

я пытаюсь использовать lodash следующим образом:

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;
    }
  });

когда я консольный журнал inter, я получаю первый массив со значениями, тогда следующие массивы пустые, но он продолжает помещать все события в массив foundEvents ивозвращенный массив совпадает с массивом событий.

1 Ответ

0 голосов
/ 07 ноября 2019
  1. Вы сравниваете два массива, используя !=. В javascript [] != [] всегда верно. Чтобы проверить, является ли массив пустым, используйте свойство length, например, arr.length == 0.
  2. . Используйте filter вместо использования map, например forEach.
  3. . Чтобы проверить наличие, используйтеsome / includes комбо вместо поиска пересечений.

Итак, отфильтруйте события, которые некоторые из его intermediateDates включены в filteredDates:

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

То же самое с использованием собственных функций:

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