Фильтровать один массив на основе свойства другого массива - PullRequest
0 голосов
/ 28 января 2019

У меня есть 2 коллекции - события и бронирования .enter image description here

События содержат коллекцию событий. Бронирования коллекция содержит только eventId события, которое нам нужно забронировать, и текущий зарегистрированный пользователь.

Я получил события, которые не были забронированы, используя lodash

  const results = _.differenceWith(
          eventsArr,
          bookingArr,
          (event, booking) => event.id == booking.eventId
        );

Как мы выбираем забронированные события?Я пытался отфильтровать массив событий на основе eventID другого массива, но это не сработало!

Любые идеи будут очень полезны!

РЕДАКТИРОВАТЬ: Добавление структуры тоже, (и спасибо за быструю помощь, добавив полную структуру, которая может помочь другому человекутакже бэкэнд был firebase)

Массив событий

{
  "-LWSkZgZ-e84Aq7EnvOo" : {
    "date" : "January 17",
    "description" : "Lorem ipsum dolor amet fashion axe cray pour-over green juice. Salvia everyday carry viral, PBR&B pop-up polaroid direct trade gochujang hot chicken disrupt gentrify quinoa crucifix pabst cred. ",
    "imageUrl" : "https://images.pexels.com/photos/1047940/pexels-photo-1047940.jpeg?auto=compress&cs=tinysrgb&dpr=1&fit=crop&h=500&w=500",
    "location" : {
      "lat" : 77.88,
      "lng" : 66.65,
      "name" : "Texas CA"
    },
    "name" : "MetalBone",
    "ticketsAvailable" : true
  },
  "-LWSkbMLqDlpTgcgFHy2" : {
    "date" : "January 18",
    "description" : "Mlkshk brooklyn gastropub paleo bicycle rights. Man bun brunch helvetica food truck whatever tousled vegan vinyl pug cred mumblecore. ",
    "imageUrl" : "https://images.pexels.com/photos/849/people-festival-party-dancing.jpg?auto=compress&cs=tinysrgb&dpr=1&fit=crop&h=500&w=500",
    "location" : {
      "lat" : 32.77,
      "lng" : 96.7,
      "name" : "Dallas SF"
    },
    "name" : "Big Day Out",
    "ticketsAvailable" : true
  },

резервирования массив

{
  "-LWdae8S33xrHfLetvT7" : {
    "eventId" : "-LWSkZgZ-e84Aq7EnvOo",
    "userMail" : "test@test.com"
  },
  "-LWdj2UDTwVV6_71Bcyd" : {
    "eventId" : "-LWTraS93uC37S21syqP",
    "userMail" : "test@test.com"
  }
}

1 Ответ

0 голосов
/ 28 января 2019

Вы можете использовать _.intersectionWith(), чтобы найти события / заказы с общим идентификатором:

const results = _.intersectionWith(
  eventsArr,
  bookingArr,
  (event, booking) => event.id === booking.eventId
);

В этом примере данные, которые вы добавили, преобразуются в формат массива.и использует _intersectionWith() для поиска забронированных событий:

const events = {"-LWSkZgZ-e84Aq7EnvOo":{"date":"January 17","description":"Lorem ipsum dolor amet fashion axe cray pour-over green juice. Salvia everyday carry viral, PBR&B pop-up polaroid direct trade gochujang hot chicken disrupt gentrify quinoa crucifix pabst cred. ","imageUrl":"https://images.pexels.com/photos/1047940/pexels-photo-1047940.jpeg?auto=compress&cs=tinysrgb&dpr=1&fit=crop&h=500&w=500","location":{"lat":77.88,"lng":66.65,"name":"Texas CA"},"name":"MetalBone","ticketsAvailable":true},"-LWSkbMLqDlpTgcgFHy2":{"date":"January 18","description":"Mlkshk brooklyn gastropub paleo bicycle rights. Man bun brunch helvetica food truck whatever tousled vegan vinyl pug cred mumblecore. ","imageUrl":"https://images.pexels.com/photos/849/people-festival-party-dancing.jpg?auto=compress&cs=tinysrgb&dpr=1&fit=crop&h=500&w=500","location":{"lat":32.77,"lng":96.7,"name":"Dallas SF"},"name":"Big Day Out","ticketsAvailable":true}}

const bookings = {"-LWdae8S33xrHfLetvT7":{"eventId":"-LWSkZgZ-e84Aq7EnvOo","userMail":"test@test.com"},"-LWdj2UDTwVV6_71Bcyd":{"eventId":"-LWTraS93uC37S21syqP","userMail":"test@test.com"}}

const result = _.intersectionWith(
  _.map(events, (v, id) => ({ id, ...v })),
  _.values(bookings),
  (event, booking) => event.id == booking.eventId
)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
...