第一次提交
This commit is contained in:
85
common/enum/enum.js
Executable file
85
common/enum/enum.js
Executable file
@@ -0,0 +1,85 @@
|
||||
/**
|
||||
* 枚举类
|
||||
* Enum.IMAGE.name => "图片"
|
||||
* Enum.getNameByKey('IMAGE') => "图片"
|
||||
* Enum.getValueByKey('IMAGE') => 10
|
||||
* Enum.getNameByValue(10) => "图片"
|
||||
* Enum.getData() => [{key: "IMAGE", name: "图片", value: 10}]
|
||||
*/
|
||||
class Enum {
|
||||
constructor (param) {
|
||||
const keyArr = []
|
||||
const valueArr = []
|
||||
|
||||
if (!Array.isArray(param)) {
|
||||
throw new Error('param is not an array!')
|
||||
}
|
||||
|
||||
param.map(element => {
|
||||
if (!element.key || !element.name) {
|
||||
return
|
||||
}
|
||||
// 保存key值组成的数组,方便A.getName(name)类型的调用
|
||||
keyArr.push(element.key)
|
||||
valueArr.push(element.value)
|
||||
// 根据key生成不同属性值,以便A.B.name类型的调用
|
||||
this[element.key] = element
|
||||
if (element.key !== element.value) {
|
||||
this[element.value] = element
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
// 保存源数组
|
||||
this.data = param
|
||||
this.keyArr = keyArr
|
||||
this.valueArr = valueArr
|
||||
|
||||
// 防止被修改
|
||||
// Object.freeze(this)
|
||||
}
|
||||
|
||||
// 根据key得到对象
|
||||
keyOf (key) {
|
||||
return this.data[this.keyArr.indexOf(key)]
|
||||
}
|
||||
|
||||
// 根据key得到对象
|
||||
valueOf (key) {
|
||||
return this.data[this.valueArr.indexOf(key)]
|
||||
}
|
||||
|
||||
// 根据key获取name值
|
||||
getNameByKey (key) {
|
||||
const prop = this.keyOf(key)
|
||||
if (!prop) {
|
||||
throw new Error('No enum constant' + key)
|
||||
}
|
||||
return prop.name
|
||||
}
|
||||
|
||||
// 根据value获取name值
|
||||
getNameByValue (value) {
|
||||
const prop = this.valueOf(value)
|
||||
if (!prop) {
|
||||
throw new Error('No enum constant' + value)
|
||||
}
|
||||
return prop.name
|
||||
}
|
||||
|
||||
// 根据key获取value值
|
||||
getValueByKey (key) {
|
||||
const prop = this.keyOf(key)
|
||||
if (!prop) {
|
||||
throw new Error('No enum constant' + key)
|
||||
}
|
||||
return prop.key
|
||||
}
|
||||
|
||||
// 返回源数组
|
||||
getData () {
|
||||
return this.data
|
||||
}
|
||||
}
|
||||
|
||||
export default Enum
|
||||
Reference in New Issue
Block a user