class Enum {
#valKeyMap = {}
constructor(initObj) {
Object.entries(initObj).forEach(([key, value]) => {
this[key] = value
})
this.#valKeyMap = Object.entries(initObj).reduce((acc, [key, value]) => {
acc[value] = key
return acc
}, {})
}
keyByVal(v) {
return this.#valKeyMap[v]
}
key(k) {
return this[k] ?? k
}
val(v) {
return this.#valKeyMap[v] ?? v
}
}
use
const nodeObj = new Enum({
intermittent: 'intermittent', // 间断
ticketTerminate: 'applyTermination', // 工作票终结
end: 'terminated', // 终结
deptEvaluated: 'deptEvaluated', // 部门级评票
coEvaluated: 'coEvaluated' // 公司级评票
})
console.log('nodeObj', nodeObj)
console.log('keys', Object.keys(nodeObj))
console.log('#valKeyMap', nodeObj['#valKeyMap'])
console.log('__proto__', nodeObj.__proto__)
// use
const currentStatus = 'applyTermination'
const currNodeCode = nodeObj.keyByVal(currentStatus)
const targetNodeCode = nodeObj.key('end')
if (currentStatus == nodeObj.ticketTerminate) {
}