试图写一个函数来确定一个复杂对象的深嵌套子数组是否有值。

问题描述 投票:0回答:1

我想写一个函数来检查一个复杂对象内部的深层嵌套子数组,如果它有值就返回true,如果它是空的就返回false,但我不知道该怎么做。

我想检查的部分是每个 contactGroups 部分中的联系人,这也是我遇到问题的地方,因为数组向下嵌套了 4 层,比如说 object > array of objects > object > contacts array 而我不知道如何在这个层次上映射或迭代。

这是我第一次传授函数,此时更多的是伪代码。


  const hasContacts = (contacts: {}) => {
    if(contacts.contactGroups.length === 0 
       || contacts.contactGroups.map((contact) => contactGroups.contacts === undefined 
       || contacts.contactGroups.map((contact) => contactGroups.contacts.length === 0 ){
      return false
    }

    return contacts
  }

数据结构是这样的

const mockContacts = {
  count: 1,
  contactGroups: [
    {
      contactGroup: "Family",
      count: 2,
      contacts: [
        {
          member: "Uncle",
          fullName: "BENJAMIN BILLIARDS",
          lastName: "BILLIARDS",
          firstName: "BENJAMIN",
          email: "[email protected]",
        },
        {
          member: "Aunt",
          fullName: "DENISE NICE",
          lastName: "NICE",
          firstName: "DENISE",
          email: "[email protected]",
        }
      ]
    },
    {
      contactGroup: "Friends",
      count: 2,
      contacts: [
        {
          member: "School Friend",
          fullName: "DERRICK SMITH",
          lastName: "SMITH",
          firstName: "DERRICK",
          email: "[email protected]",
        },
        {
          member: "Work Friend",
          fullName: "TARA SKY",
          lastName: "SKY",
          firstName: "TARA",
          email: "[email protected]",
        }
      ]
    }
javascript reactjs typescript
1个回答
2
投票

如果你想返回boolean是否有任何联系人,那么你可以做如下操作。

const hasContacts = ({ contactGroups = [] } = []) =>
  contactGroups.some(
    ({ contacts = [] } = {}) => contacts.length
  );

console.log('pass undefined', hasContacts());
console.log('pass empty object', hasContacts({}));
console.log(
  'pass empty contact group',
  hasContacts({ contactGroups: [] })
);
console.log(
  'pass empty contacts',
  hasContacts({ contactGroups: [{ contacts: [] }] })
);
console.log(
  'pass contacts',
  hasContacts({ contactGroups: [{ contacts: [1] }] })
);
console.log(
  'pass some contacts',
  hasContacts({
    contactGroups: [{ contacts: [] }, { contacts: [1] }],
  })
);

const mockContacts = {
  count: 1,
  contactGroups: [
    {
      contactGroup: 'Family',
      count: 2,
      contacts: [
        {
          member: 'Uncle',
          fullName: 'BENJAMIN BILLIARDS',
          lastName: 'BILLIARDS',
          firstName: 'BENJAMIN',
          email: '[email protected]',
        },
        {
          member: 'Aunt',
          fullName: 'DENISE NICE',
          lastName: 'NICE',
          firstName: 'DENISE',
          email: '[email protected]',
        },
      ],
    },
    {
      contactGroup: 'Friends',
      count: 2,
      contacts: [
        {
          member: 'School Friend',
          fullName: 'DERRICK SMITH',
          lastName: 'SMITH',
          firstName: 'DERRICK',
          email: '[email protected]',
        },
        {
          member: 'Work Friend',
          fullName: 'TARA SKY',
          lastName: 'SKY',
          firstName: 'TARA',
          email: '[email protected]',
        },
      ],
    },
  ],
};
console.log(
  'mock contacts:',
  hasContacts(mockContacts)
);

1
投票

假设嵌套的contactGroup联系人不能再有更多的嵌套,那么这个解决方案对你来说应该是可行的。我不清楚你想如何处理每个嵌套组,所以我返回了一个数组,它将告诉你每个嵌套组是否有联系人。

const mockContacts = {
    count: 1,
    contactGroups: [
        {
            contactGroup: "Family",
            count: 2,
            contacts: [
                {
                    member: "Uncle",
                    fullName: "BENJAMIN BILLIARDS",
                    lastName: "BILLIARDS",
                    firstName: "BENJAMIN",
                    email: "[email protected]",
                },
                {
                    member: "Aunt",
                    fullName: "DENISE NICE",
                    lastName: "NICE",
                    firstName: "DENISE",
                    email: "[email protected]",
                }
            ]
        },
        {
            contactGroup: "Friends",
            count: 2,
            contacts: [
                {
                    member: "School Friend",
                    fullName: "DERRICK SMITH",
                    lastName: "SMITH",
                    firstName: "DERRICK",
                    email: "[email protected]",
                },
                {
                    member: "Work Friend",
                    fullName: "TARA SKY",
                    lastName: "SKY",
                    firstName: "TARA",
                    email: "[email protected]",
                }
            ]
        }
    ]
}

const hasContacts = (contacts) => {
    // if contacts is not undefined, then check contactGroup
    if (contacts && Array.isArray(contacts.contactGroups)) {
        // we can have more than one contact group so need to check each
        return contacts.contactGroups.map(row=>Array.isArray(row.contacts) && row.contacts.length > 0)
    }
}

console.log(hasContacts(mockContacts))
© www.soinside.com 2019 - 2024. All rights reserved.