首页 > 解决方案 > 在 typescript 或 javascript 中按值过滤对象

问题描述

我有一个对象 JobAffiliation 并想通过 JobAffiliationEnum ex 过滤掉它。我希望 JobAffiliation 分别用于 JobAffiliationEnum.AdminPortal 和 JobAffiliationEnum.EmployeePortal

enum JobAffiliationEnum {
    AdminPortal = 1,
    EmployeePortal = 2
}

enum JobTypeEnum {
    Job1 = 1,
    Job2 = 2,
    Job3 = 3
}

const JobAffiliation = {
    [JobTypeEnum.Job1] : JobAffiliationEnum.AdminPortal,
    [JobTypeEnum.Job2] : JobAffiliationEnum.EmployeePortal,
    [JobTypeEnum.Job3] : JobAffiliationEnum.AdminPortal | JobAffiliationEnum.EmployeePortal,
    ...
}

谢谢

标签: javascripttypescript

解决方案


首先,我们可以使用Object.keys获取JobAffiliation对象键的数组,然后通过等于一个JobAffiliationEnum值来过滤它们,最后使用 reduce 构建一个具有过滤键的新对象。

const EmployeePortalKeys = Object.keys(JobAffiliation) as unknown as JobTypeEnum[]
const EmployeePortal = EmployeePortalKeys.filter((key)=> JobAffiliation[key] === JobAffiliationEnum.EmployeePortal)
    .reduce((obj, key) => {
        obj[key] = JobAffiliation[key];
        return obj;
    }, {} as JobTypeEnum[])


const AdminPortalKeys = Object.keys(JobAffiliation) as unknown as JobTypeEnum[]
const AdminPortal = AdminPortalKeys.filter((key)=> JobAffiliation[key] === JobAffiliationEnum.AdminPortal)
    .reduce((obj, key) => {
        obj[key] = JobAffiliation[key];
        return obj;
    }, {} as JobTypeEnum[])

推荐阅读