猿问

在 JavaScript 中比较数组和嵌套数组

我有两个数组,一个是accounts,另一个是departments

要求:

-> 需要比较两个数组并需要获取过滤后的帐户数组。

-> 帐户数组是单级的,而部门数组有两级,我需要比较JobTitleID帐户和部门中的值。

-> 最后返回修改后的账户数组以及过滤后的数据。

const accounts = [

  {

    "AccountId": 25205,

    "CandidateID": 8474,

    "JobTitleID": 250

  },

  {

    "AccountId": 25206,

    "CandidateID": 8474,

    "JobTitleID": 253

  },

  {

    "AccountId": 25232,

    "CandidateID": 8474,

    "JobTitleID": 257

  },

  {

    "AccountId": 25233,

    "CandidateID": 8474,

    "JobTitleID": 261

  },

  {

    "AccountId": 25236,

    "CandidateID": 8474,

    "JobTitleID": 256

  },

  {

    "AccountId": 25237,

    "CandidateID": 8474,

    "JobTitleID": 255

  },

  {

    "AccountId": 25245,

    "CandidateID": 8474,

    "JobTitleID": 281

  },

  {

    "AccountId": 25246,

    "CandidateID": 8474,

    "JobTitleID": 279

  },

  {

    "AccountId": 25265,

    "CandidateID": 8474,

    "JobTitleID": 362

  }

]





const departments = [

  {

    "deptName": "Production",

    "jobTitles": [

      {

        "JobTitleID": 246,

        "DepartmentID": 72,

        "JobName": "Department Foreman"

      },

      {

        "JobTitleID": 357,

        "DepartmentID": 72,

        "JobName": "Maintenance Supervisor"

      },

      {

        "JobTitleID": 247,

        "DepartmentID": 72,

        "JobName": "Production Manager"

      },

      {

        "JobTitleID": 362,

        "DepartmentID": 72,

        "JobName": "Safety & Compliance Supervisor"

      }

    ]

  },

  {

    "deptName": "Engineering",

    "jobTitles": [

      {

        "JobTitleID": 250,

        "DepartmentID": 73,

        "JobName": "Architect"

      },

      {

        "JobTitleID": 248,

        "DepartmentID": 73,

        "JobName": "CAD Operator"

      },

      {

        "JobTitleID": 249,

        "DepartmentID": 73,

        "JobName": "Engineering Manager"

      },

      {

        "JobTitleID": 251,

        "DepartmentID": 73,

        "JobName": "Professional Engineer"

      }

    ]

  },



慕村9548890
浏览 140回答 2
2回答

LEATH

您可以创建数组中所有作业的数组departments,然后accounts使用过滤数组.some(..)来检查先前生成的数组中是否存在特定作业。这是一个例子:const accounts = [  {    "AccountId": 25205,    "CandidateID": 8474,    "JobTitleID": 250  },  {    "AccountId": 25206,    "CandidateID": 8474,    "JobTitleID": 253  },  {    "AccountId": 25232,    "CandidateID": 8474,    "JobTitleID": 257  },  {    "AccountId": 25233,    "CandidateID": 8474,    "JobTitleID": 261  },  {    "AccountId": 25236,    "CandidateID": 8474,    "JobTitleID": 256  },  {    "AccountId": 25237,    "CandidateID": 8474,    "JobTitleID": 255  },  {    "AccountId": 25245,    "CandidateID": 8474,    "JobTitleID": 281  },  {    "AccountId": 25246,    "CandidateID": 8474,    "JobTitleID": 279  },  {    "AccountId": 25265,    "CandidateID": 8474,    "JobTitleID": 362  }]const departments = [  {    "deptName": "Production",    "jobTitles": [      {        "JobTitleID": 246,        "DepartmentID": 72,        "JobName": "Department Foreman"      },      {        "JobTitleID": 357,        "DepartmentID": 72,        "JobName": "Maintenance Supervisor"      },      {        "JobTitleID": 247,        "DepartmentID": 72,        "JobName": "Production Manager"      },      {        "JobTitleID": 362,        "DepartmentID": 72,        "JobName": "Safety & Compliance Supervisor"      }    ]  },  {    "deptName": "Engineering",    "jobTitles": [      {        "JobTitleID": 250,        "DepartmentID": 73,        "JobName": "Architect"      },      {        "JobTitleID": 248,        "DepartmentID": 73,        "JobName": "CAD Operator"      },      {        "JobTitleID": 249,        "DepartmentID": 73,        "JobName": "Engineering Manager"      },      {        "JobTitleID": 251,        "DepartmentID": 73,        "JobName": "Professional Engineer"      }    ]  },  {    "deptName": "Purchasing",    "jobTitles": [      {        "JobTitleID": 253,        "DepartmentID": 74,        "JobName": "Purchasing Agent"      },      {        "JobTitleID": 255,        "DepartmentID": 74,        "JobName": "Purchasing Manager"      },      {        "JobTitleID": 252,        "DepartmentID": 74,        "JobName": "Yard Foreman"      }    ]  }]const jobs = departments.reduce((a, c) => (a.concat(c.jobTitles)), []);const results = accounts.filter(account => jobs.some(job => job.JobTitleID === account.JobTitleID));console.log(results);

森栏

您可以使用 获得优化解决方案Set object。Set 对象仅存储任何类型的唯一值。首先,使用数组中的 set 对象获取所有唯一的 JobTitleID departments。然后使用Array.prototype.filter()方法对accounts数组进行过滤即可得到结果。const accounts = [  {    AccountId: 25205,    CandidateID: 8474,    JobTitleID: 250,  },  {    AccountId: 25206,    CandidateID: 8474,    JobTitleID: 253,  },  {    AccountId: 25232,    CandidateID: 8474,    JobTitleID: 257,  },      AccountId: 25233,    CandidateID: 8474,    JobTitleID: 261,  },  {    AccountId: 25236,    CandidateID: 8474,    JobTitleID: 256,  },  {    AccountId: 25237,    CandidateID: 8474,    JobTitleID: 255,  },  {    AccountId: 25245,    CandidateID: 8474,    JobTitleID: 281,  },  {    AccountId: 25246,    CandidateID: 8474,    JobTitleID: 279,  },  {    AccountId: 25265,    CandidateID: 8474,    JobTitleID: 362,  },];const departments = [  {    deptName: 'Production',    jobTitles: [      {        JobTitleID: 246,        DepartmentID: 72,        JobName: 'Department Foreman',      },      {        JobTitleID: 357,        DepartmentID: 72,        JobName: 'Maintenance Supervisor',      },      {        JobTitleID: 247,        DepartmentID: 72,        JobName: 'Production Manager',      },      {        JobTitleID: 362,        DepartmentID: 72,        JobName: 'Safety & Compliance Supervisor',      },    ],  },  {    deptName: 'Engineering',    jobTitles: [      {        JobTitleID: 250,        DepartmentID: 73,        JobName: 'Architect',      },      {        JobTitleID: 248,        DepartmentID: 73,        JobName: 'CAD Operator',      },      {        JobTitleID: 249,        DepartmentID: 73,        JobName: 'Engineering Manager',      },      {        JobTitleID: 251,        DepartmentID: 73,        JobName: 'Professional Engineer',      },    ],  },  {    deptName: 'Purchasing',    jobTitles: [      {        JobTitleID: 253,        DepartmentID: 74,        JobName: 'Purchasing Agent',      },      {        JobTitleID: 255,        DepartmentID: 74,        JobName: 'Purchasing Manager',      },      {        JobTitleID: 252,        DepartmentID: 74,        JobName: 'Yard Foreman',      },    ],  },];const set = new Set();departments.forEach((x) => x.jobTitles.forEach((y) => set.add(y.JobTitleID)));const ret = accounts.filter((x) => set.has(x.JobTitleID));console.log(ret);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答