我有一个对象 JobAffiliation,想通过 JobAffiliationEnum 过滤掉它 前任。我想要 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,
...
}
谢谢
答案 0 :(得分:1)
首先,我们可以使用 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[])
答案 1 :(得分:1)
假设 JobAffiliation
是一个有效的 JSON,例如:
const JobAffiliation = {
"JobTypeEnum.Job1": "JobAffiliationEnum.AdminPortal",
"JobTypeEnum.Job2": "JobAffiliationEnum.EmployeePortal",
"JobTypeEnum.Job3": "JobAffiliationEnum.AdminPortal | JobAffiliationEnum.EmployeePortal",
...
}
你可以这样写:
let AdminPortalArray = [];
let EmployeePortalArray = [];
Object.entries(JobAffiliation).forEach(job => {
if(job[1].includes("JobAffiliationEnum.AdminPortal")) AdminPortalArray.push(job);
else if (job[1].includes("JobAffiliationEnum.EmployeePortal")) EmployeePortalArray.push(job);
});
console.log(AdminPortalArray);
// this will show [{"JobTypeEnum.Job1": "JobAffiliationEnum.AdminPortal"}, {"JobTypeEnum.Job3": "JobAffiliationEnum.AdminPortal | JobAffiliationEnum.EmployeePortal"}]
console.log(EmployeePortalArray);
// this will show [{"JobTypeEnum.Job2": "JobAffiliationEnum.EmployeePortal"}, {"JobTypeEnum.Job3": "JobAffiliationEnum.AdminPortal | JobAffiliationEnum.EmployeePortal"}]
答案 2 :(得分:1)
您可以使用 Object.entries
来登记键值对,然后按值过滤它们,然后使用 Object.fromEntries
从这些条目构建新对象:
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
}
const filterValues = [JobAffiliationEnum.AdminPortal,JobAffiliationEnum.EmployeePortal];
const newObject = Object.fromEntries( Object.entries(JobAffiliation).filter(([k,v])=> filterValues.some( (f : number)=> (v & f) === f)))
console.log(newObject);
此 (v & f) === f
测试值 v
具有标志 f
。并注意标志值必须是 2 的幂。