为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕村9548890 2023-08-18 16:35:46
我有两个数组,一个是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"      }    ]  },
查看完整描述

2 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

您可以创建数组中所有作业的数组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);


查看完整回答
反对 回复 2023-08-18
?
森栏

TA贡献1810条经验 获得超5个赞

您可以使用 获得优化解决方案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);



查看完整回答
反对 回复 2023-08-18
  • 2 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信