Карта и фильтр работают на двух элементах массива, но не работают на третьем, который выглядит одинаково - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть обещание от Google People API.Фильтр map и , который отлично работает на двух элементах, но дает ошибку undefined на третьем элементе, который мне кажется одинаковым.

Я прочитал все, что могу найти на карте и фильтре , и сделал обоснованные предположения за последние два часа.Ни один из подходов, похоже, не способствует моим усилиям.

resource_LBL, names_LBL и email_LBL работает.Код не выполняется на поле _LBL.

const arr = this.k4kItems.map(item => ({
  resource_LBL: item.person.resourceName,
  names_lbl: item.person.names.filter(
    name_PARM => name_PARM.metadata.source.type === "CONTACT"
  ),
  email_LBL: item.person.emailAddresses.filter(
    email_PARM => email_PARM.metadata.source.type === "CONTACT"
  ),
  gender_LBL: item.person.genders.filter(
    gender_PARM => gender_PARM.metadata.source.type === "CONTACT"
  )
}))

Ниже приведены соответствующие элементы или обещание с JSON.Stringify (обещание).

"person": {
  "resourceName": "people\/c224283231105155344",
  "names": [
    {
      "metadata": {
        "primary": true,
        "source": {
          "type": "CONTACT",
          "id": "31cd0690f198110"
        }
      },
      "displayName": "Armena Kopf",
      "familyName": "Kopf",
      "givenName": "Armena",
      "displayNameLastFirst": "Kopf, Armena"
    },
    {
      "metadata": {
        "source": {
          "type": "PROFILE",
          "id": "112242108723070860293"
        }
      },
      "displayName": "Armena Dickson",
      "familyName": "Dickson",
      "givenName": "Armena",
      "displayNameLastFirst": "Dickson, Armena"
    }
  ],
  "genders": [
    {
      "metadata": {
        "primary": true,
        "source": {
          "type": "CONTACT",
          "id": "31cd0690f198110"
        }
      },
      "value": "female",
      "formattedValue": "Female"
    },
    {
      "metadata": {
        "source": {
          "type": "PROFILE",
          "id": "112242108723070860293"
        }
      },
      "value": "female",
      "formattedValue": "Female"
    }
  ],
  "emailAddresses": [
    {
      "metadata": {
        "primary": true,
        "source": {
          "type": "CONTACT",
          "id": "31cd0690f198110"
        }
      },
      "value": "armena_d@yahoo.com",
      "type": "home",
      "formattedType": "Home"
    }
  ]

Ожидаемый результат - сопоставление пола смассив вместо дачи и undefined ошибка.

1 Ответ

0 голосов
/ 25 декабря 2018

Просто добавьте проверку на наличие глубоких свойств, которые могут не существовать

gender_LBL: item.person.genders && item.person.genders.filter(
    gender_PARM => gender_PARM.metadata.source.type === "CONTACT"
)
...