微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

检查深层嵌套对象数组中的条件并返回父数组

如何解决检查深层嵌套对象数组中的条件并返回父数组

我在 React Native (Expo) 项目中遇到了 JavaScript 问题。

说明:

我正在使用联系人 API 从手机获取所有联系人。我想过滤列表,只呈现那些号码也包含在应用程序数据库中的联系人(注册电话)。

问题:

我想遍历对象数组并在嵌套对象 (phoneNumbers) 中找到要与用户号码进行比较的号码。如果条件正确,那么我想使用父数组作为联系方式。

这是父数组中一个对象的数据结构:

     contacts =  [
          Object {
            "contactType": "person","firstName": "Mario","id": "FF1AAC7C-679A-4C21-7AD9-05CBFCD9812A","imageAvailable": false,"lastName": "Mario","name": "Muster","phoneNumbers": Array [
            Object {
               "countryCode": "de","digits": "01722618199","id": "D5CEEE9B-1AF6-49A1-A45F-501370D5B7A7","label": "mobile","number": "0172 2618199",},],Object {
             "contactType": "person","firstName": "Tina","id": "FF1AAC7C-579A-4C21-7AD9-05CBFCD9812A","phoneNumbers": Array [
             Object {
                "countryCode": "de","digits": "01722518199","id": "D5CEEE9B-1AF5-49A1-A45F-501370D5B7A7","number": "0172 2518199",]

我的功能

    const findContacts = (userNumber) => {
    let counter = 0;
    contacts
      .filter((item) => {
        return item;
      })
      .map((item) => {
        let newElt = Object.assign({},item);
        return newElt.phoneNumbers.map((item,i) => {
          if (item.digits.toString() === userNumber) {
            counter = i;
          }
        });
      });
    return contacts[counter];
  };

出现以下错误

undefined 不是对象 newElt.phoneNumber.map

解决方法

错误实际上是“newElt.phoneNumber.map”,数字中没有“s”吗?如果是这样,则可能是因为您在函数粘贴中没有拼错。

此外,您的“过滤器”可能没有按照您的意愿行事。过滤器应返回真/假,并且只包括返回“真”的项目。

可能您真正想做的只是使用 .filter,然后为每个 phoneNumbers 包含您想要的内容的项目返回“True”...

即这样的事情会给你所有与相关电话号码匹配的父数组联系人对象(在其子数组成员中至少有一个提及)

let contactsThatHadPhoneNumber = contacts.filter(eachContact => {
  return eachContact.phoneNumbers.filter(
    eachContactNumber => eachContactNumber.number == numberYouAreLookingFor).length > 0
  )});
,

const contacts = [{
    "contactType": "person","firstName": "Mario","id": "FF1AAC7C-679A-4C21-7AD9-05CBFCD9812A","imageAvailable": false,"lastName": "Mario","name": "Muster","phoneNumbers": [{
      "countryCode": "de","digits": "01722618199","id": "D5CEEE9B-1AF6-49A1-A45F-501370D5B7A7","label": "mobile","number": "0172 2618199",},],{
    "contactType": "person","firstName": "Tina","id": "FF1AAC7C-579A-4C21-7AD9-05CBFCD9812A","digits": "01722518199","id": "D5CEEE9B-1AF5-49A1-A45F-501370D5B7A7","number": "0172 2518199",]

const getFilteredContacts = (userNumber) => {
  return contacts.filter((contact) => {
    if (contact.phoneNumbers.filter((phone) => phone.digits == userNumber).length > 0) {
      return contact
    }
  });
}

console.log(getFilteredContacts("01722618199"))

使用过滤器提取您要查找的数据。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。