JS 枚举函数封装
为了更有效的使用枚举方法,在项目工具库中配置方便全局使用:
/**
*
* @param initParams Object, 由多组键值对构成
* @constructor 返回一个object作为枚举类实例,将传入的每一组键值对生成枚举值
* Example-1: const enum1 = new Enum({a: '一', b: '二'});
* enum['a'] === '一'; // true
* enum['一'] === 'a'; // true
* Example-2: const enum2 = new Enum(['string', 'number']);
* enum['string'] === 'string'; // true
* enum['number'] === 'number'; // true
* Example-3: const enum3 = new Enum({1: '男', 0: '女'});
* Object.key(enum); // ['男', '女']
* Object.entries(enum); // [[1, '男'], [0, '女']]
*/
export class Enum {
constructor(initParams) {
if (initParams) {
if (initParams instanceof Array) {
initParams.forEach(value => this.pushEnumItem(value))
} else {
Object.entries(initParams).forEach(pair => this.EnumItem(...pair))
}
}
}
EnumItem(key,val){
if(val){
Object.defineProperties(this,{
[key]:{
get() {
return value
},
enumerable: true
},
[value]: {
get() {
return key
}
}
})
}else {
Object.defineProperty(this, key, {
get() {
return key
},
enumerable: true
})
}
}
}
使用方法:
const bool =new Enum ([
'吕不韦',
'李斯'
])//result: {吕不韦:'吕不韦',李斯:'李斯'}
Object.entries(bool)
//result: [['吕不韦', '吕不韦'],['李斯', '李斯']]
//返回的是一个键值对数组,方便进行数组的操作,如过滤、排序、查找等操作