Фильтрация вложенных коллекций с использованием Rxjs - PullRequest
0 голосов
/ 11 сентября 2018

Мне нужно отфильтровать следующую структуру данных json, используя операторы Rxjs,

. Рассмотрим следующий пример. У нас есть список отелей и каждый отель в виде номеров под ним, нам нужно получить все отели, в которых есть свободные номера.в нем

, поэтому рассмотрим следующий ввод как:

var hotels = [
   {
       "hotel": "hotel 1",
       "rooms": [
           {
               "name": "room 1",
               "flexible": true
           },
           {
               "name": "room 2",
               "flexible": false
           }
       ]
   },
   {
       "hotel": "hotel 2",
       "rooms": [
           {
               "name": "room 1",
               "flexible": false
           },
           {
               "name": "room 2",
               "flexible": false
           }
       ]
   }
];

, и желаемый результат должен быть следующим:

 var availableRooms = [
       {
           "hotel": "hotel 1",
           "rooms": [
               {
                   "name": "room 1",
                   "flexible": true
               }
           ]
       }    
  ];

так Как я могу применить это в Rxjs?

Спасибо

1 Ответ

0 голосов
/ 11 сентября 2018

Вы уверены, что нам нужен RxJx?

function isAvailable(room) { return room.flexible };
hotels
  .map(hotel => ({ ...hotel, rooms: hotel.rooms.filter(isAvailable) }))
  .filter(hotel => hotel.rooms.length);

Если hotel идет один за другим - используйте тот же подход, но с операторами RxJ.

Отредактировано
Решение с RxJS

function isAvailable(room) { return room.flexible };
from(hotels).pipe(
  map(hotel => ({ ...hotel, rooms: hotel.rooms.filter(isAvailable) })),
  filter(hotel => hotel.rooms.length),
  toArray(),
).subscribe(console.log)
...