Map和Filter在两个数组元素上起作用,但在第三个看起来相同的数组元素上失败 [英] Map and Filter works on two array elements but fails on a third that is seemingly the same

查看:78
本文介绍了Map和Filter在两个数组元素上起作用,但在第三个看起来相同的数组元素上失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对Google People API的承诺.一个地图过滤器可以完美地在两个元素上工作,但是在对我来说似乎相同的第三个元素上却出现了 undefined 错误. >

我已阅读了在地图过滤器上可以找到的所有内容,并进行了最后两个小时的有根据的猜测.两种方法似乎都无法促进我的努力.

resource_LBL,names_LBL和email_LBL起作用.该代码在gender_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(promise)的承诺.

"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 错误.

解决方案

只需添加检查是否存在可能不存在的深层属性

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

I have a promise from the Google People API. A map and filter that works on two elements perfectly, but gives an undefined error on a third element that seems the same to me.

I've read everything I can find on map and filter and taken educated guess for the last two hours. Neither approach seems to be advancing my efforts.

resource_LBL, names_LBL, and email_LBL works. The code fails on gender_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"
  )
}))

Below is the relevant elements or the promise with JSON.Stringify(promise).

"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"
    }
  ]

The expected result is that gender would map to the array instead of giving and undefined error.

解决方案

Just add a check for the existence of deep properties that may not exist

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

这篇关于Map和Filter在两个数组元素上起作用,但在第三个看起来相同的数组元素上失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆