Node.js - найти параметр в массиве, вложенном в объект JSON, и вернуть другие параметры - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть вызов API в Node.js, который возвращает объект JSON.

Мне нужно найти в этом объекте номер телефона клиента (желательно по функции) с body.result.reservations[X of reserv.].client.phone и вернуть параметры phone, dateFrom и dateTo, предпочтительно в массив, с body.result.reservations[X number].reservationDetails.dateFrom и и так далее.

Доступ к этим параметрам работает через добавление точек, но когда я пытаюсь использовать какой-либо алгоритм поиска из Интернета, он выходит из строя с неопределенным, .phone не является функцией и другими причудливыми вещами.

Это вывод из console.log(body.result.reservations):

[
    {
        id: 1,
        reservationDetails:
            {
                price: 670,
                dateFrom: '2019-03-29 13:59',
                dateTo: '2019-04-05 19:00',
                status: 'waiting'
            }
    },

    {   id: 2,
        reservationDetails:
            { price: 4500,
                dateFrom: '2019-04-09 20:00',
                dateTo: '2019-05-18 12:00',
                status: 'accepted',
                },
        client:
            {   id: 8,
                login: 'customer@x.com',
                clientType: 'person',
                phone: '+5.500500500',
                } 
     },
     {   id: 4,
        reservationDetails:
            { price: 9500,
                dateFrom: '2020-04-09 13:00',
                dateTo: '2020-04-18 10:00',
                status: 'passed',
                },
        client:
            {   id: 8,
                login: 'customer2@x2.com',
                clientType: 'person',
                phone: '+38.700500500',
                } 
     }
]

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Вероятно, потому, что не все записи в массиве имеют свойство client и, следовательно, не имеют номера телефона.Это решение предоставляет вам массив всех бронирований с номером телефона или номером телефона в качестве «пропущенного номера телефона» на случай, если он пропущен.

    const body = {
      result: {
        reservations: [
          {
            id: 1,
            reservationDetails:
            {
              price: 670,
              dateFrom: '2019-03-29 13:59',
              dateTo: '2019-04-05 19:00',
              status: 'waiting'
            }
          },

          {
            id: 2,
            reservationDetails:
            {
              price: 4500,
              dateFrom: '2019-04-09 20:00',
              dateTo: '2019-05-18 12:00',
              status: 'accepted',
            },
            client:
            {
              id: 8,
              login: 'customer@x.com',
              clientType: 'person',
              phone: '+5.500500500',
            }
          },
          {
            id: 4,
            reservationDetails:
            {
              price: 9500,
              dateFrom: '2020-04-09 13:00',
              dateTo: '2020-04-18 10:00',
              status: 'passed',
            },
            client:
            {
              id: 8,
              login: 'customer2@x2.com',
              clientType: 'person',
              phone: '+38.700500500',
            }
          }]
      }
    } 


      const reservations = body.result.reservations.map((reservation) => {
        return {
          dateFrom : reservation.reservationDetails.dateFrom,
          dateTo: reservation.reservationDetails.dateTo,
          phone: reservation.client ? reservation.client.phone : 'missing phone number'
        }
       });

0 голосов
/ 01 апреля 2019

Вы можете использовать Array.prototype.find:

const data = [
    {
        id: 1,
        reservationDetails:
        {
            price: 670,
            dateFrom: '2019-03-29 13:59',
            dateTo: '2019-04-05 19:00',
            status: 'waiting'
        }
    },

    {
        id: 2,
        reservationDetails:
        {
            price: 4500,
            dateFrom: '2019-04-09 20:00',
            dateTo: '2019-05-18 12:00',
            status: 'accepted',
        },
        client:
        {
            id: 8,
            login: 'customer@x.com',
            clientType: 'person',
            phone: '+5.500500500',
        }
    },
    {
        id: 4,
        reservationDetails:
        {
            price: 9500,
            dateFrom: '2020-04-09 13:00',
            dateTo: '2020-04-18 10:00',
            status: 'passed',
        },
        client:
        {
            id: 8,
            login: 'customer2@x2.com',
            clientType: 'person',
            phone: '+38.700500500',
        }
    }]
    
function findPhone(phone, data){
  const result = data.find(e => e.client ? e.client.phone === phone : null);
  return result ? result : 'No match found';
}

console.log(findPhone('+38.700500500', data));
console.log(findPhone('11111', data));

Это вернет совпавший объект или «Совпадение не найдено».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...