12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- /**
- * 枚举类
- * 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
|