如何转换为高阶函数?
How to convert to Higher Order Function?
我正在尝试将下面的内容转换为 HOF,但下面是我想出的最好的。结果是标准的。如何更好地使用函数式编程?
第一次尝试:
const privileges = {
canAccessProject: 'Project',
canAccessReport: 'Report'
},
licenses = {
core: 'Core',
review: 'Review'
};
const getPrivileges = (access) => getPermissions(access, privileges);
const getLicenses = (access) => getPermissions(access, licenses);
const getPermissions = (access, entity) => Object.keys(access).map((p) => (access[p] ? entity[p] : '')).join(', ');
// output: "Project, Report"
console.log(getPrivileges({canAccessProject: true, canAccessReport; true }))
// output: "Review"
console.log(getLicenses({review: true, core; false }))
第二次尝试:
const getPrivileges = (access) => getPermissions(access)(privileges)
const getLicenses = (access) => getPermissions(access)(licenses);
const getPermissions = (access) => (entity) => Object.keys(access).map((p) => (access[p] ? entity[p] : '')).join(', ');
好吧,getPermissions
可以将实体作为第一个参数,并且可以 return 一个采用 access
的函数然后:
const getPermissions = (entity) => (access) => Object.keys(access).map((p) => (access[p] ? entity[p] : '')).join(', ');
const getLicenses = getPermissions(licenses);
我正在尝试将下面的内容转换为 HOF,但下面是我想出的最好的。结果是标准的。如何更好地使用函数式编程?
第一次尝试:
const privileges = {
canAccessProject: 'Project',
canAccessReport: 'Report'
},
licenses = {
core: 'Core',
review: 'Review'
};
const getPrivileges = (access) => getPermissions(access, privileges);
const getLicenses = (access) => getPermissions(access, licenses);
const getPermissions = (access, entity) => Object.keys(access).map((p) => (access[p] ? entity[p] : '')).join(', ');
// output: "Project, Report"
console.log(getPrivileges({canAccessProject: true, canAccessReport; true }))
// output: "Review"
console.log(getLicenses({review: true, core; false }))
第二次尝试:
const getPrivileges = (access) => getPermissions(access)(privileges)
const getLicenses = (access) => getPermissions(access)(licenses);
const getPermissions = (access) => (entity) => Object.keys(access).map((p) => (access[p] ? entity[p] : '')).join(', ');
好吧,getPermissions
可以将实体作为第一个参数,并且可以 return 一个采用 access
的函数然后:
const getPermissions = (entity) => (access) => Object.keys(access).map((p) => (access[p] ? entity[p] : '')).join(', ');
const getLicenses = getPermissions(licenses);